SQL Ready | Программирование

@sql_ready
FILTER в агрегатных функциях PostgreSQL! В аналитических запросах часто нужно посчитать несколько показателей из одной таблицы. В PostgreSQL для этого есть FILTER, позволяющий задавать условия отдельно для каждой агрегатной функции, не влияя на весь запрос. Представим таблицу заказов: orders(id, customer_id, amount, status) Посчитаем общее количество заказов и количество завершённых: SELECT COUNT(*) AS total_orders, COUNT(*) FILTER (WHERE status = 'completed') AS completed_orders FROM orders; FILTER применяется непосредственно к агрегатной функции и ограничивает только те строки, которые участвуют в её расчёте. Добавим несколько метрик в одном запросе: SELECT COUNT(*) AS total_orders, COUNT(*) FILTER (WHERE status = 'completed') AS completed_orders, COUNT(*) FILTER (WHERE status = 'canceled') AS canceled_orders, SUM(amount) FILTER (WHERE status = 'completed') AS completed_amount FROM orders; Каждая агрегатная функция имеет собственное условие, а все значения считаются за один проход по данным — без подзапросов и лишней логики. FILTER можно использовать с любыми агрегатами: AVG(amount) FILTER (WHERE status = 'completed') MAX(amount) FILTER (WHERE status = 'completed') MIN(amount) FILTER (WHERE status = 'completed') Важно помнить: FILTER работает только с агрегатными функциями и применяется внутри SELECT, дополняя, а не заменяя WHERE и GROUP BY. SQL Ready | #практика
Если у вас установлено приложение,
вы можете сразу перейти в канал