Два выражения: SUM(CASE WHEN status='paid' THEN amount END) и SUM(amount) FILTER (WHERE status='paid'). Что верно?

AТолько FILTER учитывает строки, где условие ложно, а SUM(CASE WHEN ...) всегда исключает их полностью
BТолько SUM(CASE WHEN ...) подходит для запросов с GROUP BY, а FILTER работает только с оконными функциями
CРезультаты разные: FILTER суммирует значения, а SUM(CASE WHEN ...) считает количество совпадений с условием
DОба выражения дают одинаковый результат: суммируют amount только по строкам, где status = 'paid'
Правильный ответ. Оба выражения семантически эквивалентны: суммируют amount только по строкам, где status='paid'.

Разбор

SUM(CASE WHEN cond THEN val END) возвращает NULL для не совпавших строк (нет ELSE), а SUM игнорирует NULL — итог: суммируются только строки, где условие истинно. SUM(val) FILTER (WHERE cond) делает то же самое через более явный синтаксис. Разница лишь в стиле: FILTER — стандарт SQL:2003, читается чище; CASE WHEN — универсален для всех СУБД.

Проверь себя · 1/3разбор после ответа
Что делает оператор HAVING в SQL-запросе с группировкой?
Тренировать SQL в Telegram

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