Je dois compter l'appel répondu dans certaines plages 0 à 10 sec, 0 à 20 sec, etc. Le nombre augmentera tandis que le delta sera le nombre différent entre le courant et le prochain. Le% sera le nombre actuel/le total final.Compter l'appel répondu dans certaines plages 0 à 10 sec, grouper par nombre
Voici le sqlfiddle que vous pouvez utiliser avec des données pour les tests: http://sqlfiddle.com/#!9/803d2/2
table Exemple de callsdetails:
+-----+----------------+----------+----------+---------------+
| id | callid | callerno | duration | status |
+-----+----------------+----------+----------+---------------+
| 634 | 1479097551.228 | 1000 | 2 | complete |
| 635 | 1479102518.248 | 1000 | 12 | complete |
+-----+----------------+----------+----------+---------------+
Résultat attendu:
+------------------------+----------+----------+----------+
| Ranges | Count | Delta | % |
+------------------------+----------+----------+----------+
| Between 0 to 10 secs | 44 | +44 | 84.62 % |
| Between 0 to 20 secs | 48 | +4 | 92.31 % |
| Between 0 to 30 secs | 50 | +2 | 96.15 % |
| Between 0 to 40 secs | 51 | +1 | 98.08 % |
| Between 0 to 50 secs | 51 | +0 | 98.08 % |
| Between 0 to 60 secs | 51 | +0 | 98.08 % |
| Between 0 to 70 secs | 51 | +0 | 98.08 % |
| Between 0 to 80 secs | 52 | +1 | 100.00 % |
| Between 0 to 90 secs | 52 | +0 | 100.00 % |
| Between 0 to 100+ secs | 52 | +0 | 100.00 % |
+------------------------+----------+----------+----------+
Total 52
Ce que je suis en mesure de créer maintenant est ci-dessous la requête, si vous pouvez aider à fournir une meilleure solution, s'il vous plaît des conseils. Le problème auquel je fais face maintenant est (priorité) je ne suis pas capable d'obtenir le compte et (secondaire) le total final compte (52) pour le%, maintenant je mets manuellement dans le total final compte (52). S'il vous plaît aider.
SELECT Ranges,Delta,ROUND(Delta/52*100,2) AS '%'
FROM
(
SELECT
(
IF(duration<=10,'10',IF(duration<=20,'20',IF(duration<=30,'30',
IF(duration<=40,'40',IF(duration<=50,'50',
IF(duration<=60,'60',IF(duration<=70,'70',IF(duration<=80,
'80',IF(duration<=90,'90','100+'))))))))))
AS Ranges,COUNT(duration) AS Delta
FROM callsdetails
GROUP BY Ranges
) a
GROUP BY Ranges;
Résultat actuel:
+--------+-------+-------+
| Ranges | Delta | % |
+--------+-------+-------+
| 10 | 44 | 84.62 |
| 20 | 4 | 7.69 |
| 30 | 2 | 3.85 |
| 40 | 1 | 1.92 |
| 80 | 1 | 1.92 |
+--------+-------+-------+
Vous pourriez juste 'UNION' un compte total vers le bas. aussi à quoi ressemble la table d'origine? – RealCheeseLord
J'ai ajouter dans le tableau d'exemple ci-dessus pour référence à la table d'origine. S'il vous plaît donnez votre avis. – DarkSilver