首页 > 解决方案 > 如何对计数数据进行分组

问题描述

我有 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。

我应该在查询中更改什么?

标签: mysqlgroup-bycount

解决方案


SELECT
    B.province AS 'PROVINCE',
    SUM(CASE
        WHEN TIMEDIFF(A.deli_time, A.create_time) < '20:00:00' THEN 1
    END) AS 'Below SLA',

为每个案例设置一个聚合函数,在它之外。我只为一个案例做了一个,都是一样的。


推荐阅读