Как группировать подсчитанные данные

#mysql #group-by #count

#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.

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

Ответ №1:

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

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

Комментарии:

1. Большое вам спасибо! Мне никогда не приходило в голову использовать агрегатную функцию вне регистра.

2. @HilmanDhannysworo, к вашему сведению, как новичок на сайте, если вы обнаружите, что ответ решает вашу проблему, обычно решение помечается флажком как решенное. Это помогает другим в аналогичных условиях узнать, что сработало, а что нет.

3. @DRapp где находится флажок? Извините, я новичок на этом сайте