Как группировать подсчитанные данные - PullRequest
1 голос
/ 21 апреля 2019

У меня есть 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 - это сумма всех записей «Бали», но фактически она разделена на 19 ниже SLA, 5 ближних SLA и 6 Over SLA.

Что я должен изменить в своем запросе?

1 Ответ

0 голосов
/ 21 апреля 2019
SELECT
    B.province AS 'PROVINCE',
    SUM(CASE
        WHEN TIMEDIFF(A.deli_time, A.create_time) < '20:00:00' THEN 1
    END) AS 'Below SLA',

Поместите агрегатную функцию для каждого случая, ВНЕ этого. Я сделал это только для одного случая, все одинаково.

...