【发布时间】:2017-09-11 08:12:46
【问题描述】:
我需要计算在 0 到 10 秒、0 到 20 秒等特定范围内应答的呼叫。计数会增加,而增量将是当前和下一个之间的不同计数。 % 将是当前计数/最终计数总数。
这是您可以使用数据进行测试的 sqlfiddle:http://sqlfiddle.com/#!9/803d2/2
调用详情示例表:
+-----+----------------+----------+----------+---------------+
| id | callid | callerno | duration | status |
+-----+----------------+----------+----------+---------------+
| 634 | 1479097551.228 | 1000 | 2 | complete |
| 635 | 1479102518.248 | 1000 | 12 | complete |
+-----+----------------+----------+----------+---------------+
预期结果:
+------------------------+----------+----------+----------+
| 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
我现在能够创建的是以下查询,如果您可以帮助提供更好的解决方案,请提出建议。我现在面临的问题是(优先级)我无法获得百分比的计数和(次要)最终计数总数(52),现在我手动输入最终计数总数(52)。请帮忙。
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;
当前结果:
+--------+-------+-------+
| Ranges | Delta | % |
+--------+-------+-------+
| 10 | 44 | 84.62 |
| 20 | 4 | 7.69 |
| 30 | 2 | 3.85 |
| 40 | 1 | 1.92 |
| 80 | 1 | 1.92 |
+--------+-------+-------+
================================================ ==============================
感谢 Etsa 帮助我解决了上述问题,即所有呼叫的总数,现在我可能需要再次帮助,为每个队列名称添加分组。它与上面的公式相同,但现在必须按队列名称拆分或分组。
这是您可以使用数据进行测试的 sqlfiddle:http://sqlfiddle.com/#!9/efe11b/2
预期结果:
+---------+------+-----------+-------+--------+
| QUEUE | RAN | TOT_COUNT | DELTA | % |
+---------+------+-----------+-------+--------+
| sales | 10 | 6 | 6 | 100.00 |
| sales | 20 | 6 | 0 | 100.00 |
| sales | 30 | 6 | 0 | 100.00 |
| sales | 40 | 6 | 0 | 100.00 |
| sales | 50 | 6 | 0 | 100.00 |
| sales | 60 | 6 | 0 | 100.00 |
| sales | 70 | 6 | 0 | 100.00 |
| sales | 80 | 6 | 0 | 100.00 |
| sales | 90 | 6 | 0 | 100.00 |
| sales | 100+ | 6 | 0 | 100.00 |
| enquiry | 10 | 32 | 32 | 80.00 |
| enquiry | 20 | 36 | 4 | 90.00 |
| enquiry | 30 | 38 | 2 | 95.00 |
| enquiry | 40 | 39 | 1 | 97.50 |
| enquiry | 50 | 39 | 0 | 97.50 |
| enquiry | 60 | 39 | 0 | 97.50 |
| enquiry | 70 | 39 | 0 | 97.50 |
| enquiry | 80 | 40 | 1 | 100.00 |
| enquiry | 90 | 40 | 0 | 100.00 |
| enquiry | 100+ | 40 | 0 | 100.00 |
| others | 10 | 6 | 6 | 100.00 |
| others | 20 | 6 | 0 | 100.00 |
| others | 30 | 6 | 0 | 100.00 |
| others | 40 | 6 | 0 | 100.00 |
| others | 50 | 6 | 0 | 100.00 |
| others | 60 | 6 | 0 | 100.00 |
| others | 70 | 6 | 0 | 100.00 |
| others | 80 | 6 | 0 | 100.00 |
| other | 90 | 6 | 0 | 100.00 |
| others | 100+ | 6 | 0 | 100.00 |
+---------+------+-----------+-------+--------+
【问题讨论】:
-
你试过了吗? SO 不是免费软件服务。尝试做出努力,将其发布在您的问题中,然后寻求帮助。此外,我建议创建一个新问题。
-
嗨,Etsa,我真的很抱歉让我看起来像是在利用你。我一直在尝试多次修改您的代码,但我尝试的次数越多,显示的最终结果就越错误。非常抱歉打扰您,因为我对此不太熟悉,希望能得到您的帮助。真的很抱歉,感谢您的帮助。
标签: mysql group-by count range intervals