Выражение CASE WHEN в SQL: условная логика и pivot

CASE — условное выражение SQL, аналог if-else: оно проверяет условия WHEN по порядку и возвращает значение первого сработавшего THEN (иначе ELSE). Для аналитика это универсальный инструмент: сегментация клиентов по порогам, категоризация, и главное — pivot (разворот строк в колонки) через условную агрегацию SUM(CASE WHEN …).

Синтаксис

CASE WHEN условие1 THEN значение1 WHEN условие2 THEN значение2 ELSE значение_иначе END

Примеры использования

Пример 1: Сегментация клиентов по сумме покупок

SELECT user_id, total,
       CASE WHEN total >= 10000 THEN 'VIP'
            WHEN total >= 3000  THEN 'средний'
            ELSE 'новичок' END AS segment
FROM customer_revenue;

Результат:

user_id | total | segment
1       | 12000 | VIP
2       | 4000  | средний
3       | 500   | новичок

Пример 2: Pivot: статусы заказов в колонки

SELECT month,
       SUM(CASE WHEN status = 'paid'      THEN 1 ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY month;

Результат:

month   | paid | cancelled
2026-01 | 120  | 14
2026-02 | 138  | 9
Порешать SQL-задачи в тренажёре →

Типичная ошибка

CASE проверяет условия сверху вниз и берёт первое истинное — порядок важен: более узкие условия ставь выше. Без ELSE несработавшие строки получат NULL. И помни: CASE — это выражение, а не оператор, поэтому его можно вставлять в SELECT, WHERE, ORDER BY и внутрь агрегатов.

Где спрашивают на собеседовании

CASE — один из самых частых элементов в задачах: сегментация, категоризация возрастов, и особенно pivot через SUM(CASE WHEN). На собеседовании часто просят «разверни строки в колонки» — это ровно условная агрегация с CASE.

FAQ: частые вопросы про CASE WHEN

Как сделать pivot через CASE WHEN?

Оберни CASE в агрегат: SUM(CASE WHEN категория = 'X' THEN значение ELSE 0 END) даёт отдельную колонку на каждую категорию — это классический разворот строк в столбцы без оператора PIVOT.

В чём разница между CASE и COALESCE?

COALESCE выбирает первое не-NULL значение из списка. CASE — универсальнее: проверяет произвольные условия (сравнения, диапазоны) и возвращает любое значение. COALESCE — частный случай логики «если NULL».

Можно ли использовать CASE в WHERE и ORDER BY?

Да, CASE — выражение, его можно ставить в SELECT, WHERE, ORDER BY, GROUP BY и внутрь агрегатных функций.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Условная логика · Пивот (поворот таблицы)

Другие функции SQL

COALESCE · NULLIF · CAST · ROUND · MOD / % · SIGN / TRUNC

Открыть SQL-тренажёр (565 задач) →