@MarkLb

Почему при применении оператора WHERE перестаёт корректно работать case?

Без "WHERE" запрос корректно отрабатывает:
SELECT 
SUM (CASE WHEN STATUS = 20 THEN 1 ELSE 0 END) AS `paid_count`, 
SUM(CASE WHEN STATUS <> 20 THEN 1 ELSE 0 END) AS `unpaid_count`,
`method` AS `payment_system` 
FROM `payment` 
GROUP BY `method` 
ORDER BY `paid_count` DESC 
LIMIT 20


Результат:
4cnYuht.png

Как только добавляется "WHERE" для фильтрации по дате - перестаёт считаться unpaid_count(выводит 0), хотя paid_count считает корректно:
SELECT 
SUM(CASE WHEN STATUS = 20 THEN 1 ELSE 0 END) AS `paid_count`, 
SUM(CASE WHEN STATUS <> 20 THEN 1 ELSE 0 END) AS `unpaid_count`, 
`method` AS `payment_system` 
FROM `payment` 
WHERE (`paid_at` >= 1656622800) AND (`paid_at` <= 1657400399) 
GROUP BY `method` 
ORDER BY `paid_count` DESC LIMIT 20


Результат:
LwraIOd.png
(неоплаченные записи в указанном диапазоне дат есть)
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы