#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 где находится флажок? Извините, я новичок на этом сайте