Нужно получить по каждому менеджеру число выполненных и число отменённых заказов в одной строке результата. Какой подход позволяет это сделать?

AПосчитать количество заказов со статусом «выполнен» и «отменён» по каждому менеджеру в одном запросе
BОтфильтровать строки по статусу перед группировкой через условие в WHERE
CСоздать отдельный подзапрос для каждого статуса и соединить результаты
DИспользовать отдельный GROUP BY-запрос для каждого значения статуса
Правильный ответ. Конструкция SUM(CASE WHEN status='done' THEN 1 ELSE 0 END) внутри GROUP BY позволяет «разворачивать» категории в отдельные столбцы без дополнительных подзапросов.

Разбор

Условная агрегация через SUM(CASE WHEN ... THEN 1 ELSE 0 END) или COUNT(CASE WHEN ... THEN 1 END) позволяет считать строки по нескольким условиям одновременно внутри одного GROUP BY-запроса. Это избавляет от необходимости писать несколько отдельных подзапросов или JOIN-ов к одной таблице. В PostgreSQL аналогичный результат даёт синтаксис FILTER (WHERE ...).

Проверь себя · 1/3разбор после ответа
Что вернёт запрос SELECT AVG(salary) FROM employees;?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»