📍Стиль 1
SELECT
COUNT(CASE
WHEN days_lost = 1 THEN NULL
ELSE days_lost
END
) AS count_of_days_lost
FROM safety;
Преимущества
— Явно видно, что происходит
— Очень гибкий, подходит для сложной логики
Недостатки
— Многословный, добавляет шум
— Часто используется там, где можно проще
📍Стиль 2
SELECT
COUNT(NULLIF(days_lost, 1)) AS count_of_days_lost
FROM safety;
Преимущества
— Коротко и аккуратно для простых условий
— Меньше шаблонного кода по сравнению с CASE
Недостатки
— Хуже читается для новичков
— Ограничен простыми проверками на равенство
📍Стиль 3
SELECT
COUNT(*) FILTER (WHERE days_lost != 1) AS count_of_days_lost
FROM safety;
Преимущества
— Читаемо, намерение выражено напрямую
— Логика отделена от агрегации
— Удобно при нескольких условиях
Недостатки
— Поддерживается не во всех диалектах SQL
— Менее распространен среди разработчиков
👉 @SQLPortal
