TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2368 4.11K
SQL-приём: FILTER в агрегатах вместо пачки CASE WHEN.

Обычно пишут так:


SELECT
COUNT(*) AS total_orders,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_orders,
SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failed_orders,
SUM(CASE WHEN amount > 1000 THEN amount ELSE 0 END) AS big_order_revenue
FROM orders;


Но в PostgreSQL это можно сделать чище:


SELECT
COUNT(*) AS total_orders,
COUNT(*) FILTER (WHERE status = 'paid') AS paid_orders,
COUNT(*) FILTER (WHERE status = 'failed') AS failed_orders,
SUM(amount) FILTER (WHERE amount > 1000) AS big_order_revenue
FROM orders;


Чем полезно:

• запрос читается как аналитическая таблица
• меньше шума от CASE WHEN
• проще добавлять новые метрики
• условия не смешиваются с логикой агрегации
• особенно удобно для дашбордов и отчётов

А ещё можно делать несколько метрик по разным условиям за один проход по данным:


SELECT
date_trunc('day', created_at) AS day,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'refunded') AS refunded,
AVG(amount) FILTER (WHERE status = 'paid') AS avg_paid_amount
FROM orders
GROUP BY 1
ORDER BY 1;


Это маленькая фича, но в реальной аналитике она сильно повышает читаемость SQL.
  • 👍 15
  • ❤ 10
  • 🔥 2
  • 🥰 1
More from @sqlhub
  1. Sep 21, 2026🧩 Сложная SQL-задача: симуляция DNS-кеша Есть таблица запросов: CREATE TABLE dns_requests…
  2. Sep 18, 2026🔥 PostgreSQL 19 задерживается релиз может сдвинуться на несколько недель или даже месяцев…
  3. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  4. Sep 17, 2026📌 NY Post: Anthropic - это культ Профессор Вашингтонского университета Педро Домингос в и…
  5. Sep 16, 2026Post #2492
  6. Sep 16, 2026Стать специалистом по Data Science всего за 10 недель — это реально! Если давно смотрите в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →