mysql - 如何对计数数据进行分组
问题描述
我有 3 个类别(低于 SLA、接近 SLA、高于 SLA)有不同的条件,我尝试计算数据但结果未按其类别汇总
这是我的查询:
SELECT
B.province AS 'PROVINCE',
CASE
WHEN TIMEDIFF(A.deli_time, A.create_time) < '20:00:00' THEN COUNT(TIMEDIFF(A.deli_time, A.create_time))
END AS 'Below SLA',
CASE
WHEN (TIMEDIFF(A.deli_time, A.create_time) > '20:00:00') AND (TIMEDIFF(A.deli_time, A.create_time) < '24:00:00') THEN COUNT(TIMEDIFF(A.deli_time, A.create_time))
END AS 'NEAR SLA',
CASE
WHEN TIMEDIFF(A.deli_time, A.create_time) > '24:00:00' THEN COUNT(TIMEDIFF(A.deli_time, A.create_time))
END AS 'OVER SLA'
FROM
deli_order A
INNER JOIN
deli_order_delivery B on A.id = B.order_id
WHERE
(DATE(A.plat_create_time) BETWEEN '2019-03-30' AND'2019-04-07') AND (TIMEDIFF(A.deli_time, A.create_time) IS NOT NULL)
GROUP BY B.province;
这是我得到的结果:
Province | Below SLA | Near SLA | Over SLA
------------------------------------------------
Bali 30 Null Null
30 是“Bali”所有记录的总数,但实际上分为 19 个低于 SLA,5 个接近 SLA,6 个超过 SLA。
我应该在查询中更改什么?
解决方案
SELECT
B.province AS 'PROVINCE',
SUM(CASE
WHEN TIMEDIFF(A.deli_time, A.create_time) < '20:00:00' THEN 1
END) AS 'Below SLA',
为每个案例设置一个聚合函数,在它之外。我只为一个案例做了一个,都是一样的。
推荐阅读
- r - 如何删除遵循某种模式的字符串的一部分,但不包括使用 R 的另一个模式?
- python - 从 environment.yml 文件创建环境 tqdm 访问被拒绝
- python - 如何在tensorflow中自动选择空闲GPU进行模型训练?
- php - 如何将 Wordpress 中的帖子内容直接插入文件管理器?
- python - 在子图中绘制熊猫数据框
- java - 如何使用谷歌翻译获取多个单词的翻译
- c++ - 我无法停留在循环中,也应该添加总数,直到用户使用输入 N || 退出循环 n
- python-3.x - 如何在没有类型转换的情况下在 python 中获取输入,以使实际输出不会被覆盖?
- google-app-engine - 谷歌负载均衡器简单的 url 重定向
- python - 如何使用一行代码翻转姓氏和名字?