Правильный синтаксис и применение SQL Case: примеры и советы
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Выражение CASE в SQL служит для реализации условной логики в запросах, что аналогично конструкции IF-ELSE в программировании. Применение выражения выглядит следующим образом:
SELECT
CASE WHEN условие THEN результат
ELSE значение_по_умолчанию END
FROM таблица;
Например, для категоризации возраста
, запрос будет выглядеть так:
SELECT
CASE
WHEN возраст < 18 THEN 'Несовершеннолетний'
WHEN возраст >= 18 THEN 'Взрослый'
END AS ГруппаВозраста
FROM люди;
Данный запрос определяет каждый возраст
как 'Несовершеннолетний' или 'Взрослый' и выводит результат в столбец ГруппаВозраста
.
Основы CASE
Простой и поисковый: два типа CASE
В SQL существует два варианта выражений CASE — это простой CASE и поисковый CASE. Выбор между ними зависит от поставленной задачи:
- Простой CASE сравнивает единое выражение с несколькими конкретными значениями. Пример использования:
SELECT
CASE цвет
WHEN 'красный' THEN 'стоп'
WHEN 'желтый' THEN 'внимание'
WHEN 'зеленый' THEN 'иди'
ELSE 'неизвестно'
END AS светофор
FROM сигналы;
- Поисковый CASE применяется для проверки последовательности логических условий, например, при учете успеваемости студентов:
SELECT
CASE
WHEN оценка >= 90 THEN 'Отлично'
WHEN оценка >= 80 THEN 'Хорошо'
WHEN оценка >= 70 THEN 'Средне'
ELSE 'Требуется улучшение'
END AS классификация
FROM результаты_экзаменов;
Обход проблемы NULL в ELSE
Если в выражении CASE отсутствует блок ELSE, то вернется NULL
, если ни одно из условий WHEN не было выполнено. Чтобы избежать этого, можно задать значение по умолчанию через ELSE:
CASE
WHEN условие THEN результат
ELSE 'Значение по умолчанию'
END
Также можно использовать функцию COALESCE
для замены NULL
на значение по умолчанию:
COALESCE(
(CASE
WHEN условие THEN результат
END),
'Значение по умолчанию'
)
Практические советы при работе с CASE
- Порядок: Располагайте условия таким образом, чтобы самые вероятные варианты проверялись в первую очередь.
- Простота: Чем более простые условия, тем выше читаемость кода и удобнее его поддержка.
- Полное покрытие: Убедитесь, что ваша логика охватывает все возможные случаи.
CASE: Продвинутое использование
Условная агрегация в отчетах
Особо интересное применение выражение CASE находит при условной агрегации:
SELECT
SUM(CASE WHEN пол = 'Женский' THEN сумма ELSE 0 END) AS ОбщаяСуммаЖенскихПродаж,
SUM(CASE WHEN пол = 'Мужской' THEN сумма ELSE 0 END) AS ОбщаяСуммаМужскихПродаж
FROM продажи;
Вложенные CASE
Для сложных логических конструкций возможно применение вложенных выражений CASE:
SELECT
CASE
WHEN внешнее_условие THEN
(CASE
WHEN внутреннее_условие THEN 'Результат А'
ELSE 'Результат В'
END)
ELSE 'Результат С'
END AS вложенный_результат
FROM данные;
CASE в операциях JOIN
Выражение CASE может быть использовано в условиях JOIN для создания динамических условий соединения таблиц:
SELECT *
FROM таблица1
JOIN таблица2 ON
CASE
WHEN таблица1.столбец = 'условие' THEN таблица1.id = таблица2.соответствующий_id
ELSE таблица1.id = таблица2.стандартный_id
END
Визуализация
Изобразить выражение CASE можно как перекресток с разными маршрутами:
🚦 CASE WHEN условие1 THEN результат1 🚦
/
SQL-поток ---> X WHEN условие2 THEN результат2 ---> Путь результата
\
🚦 ELSE результат_по_умолчанию 🚦
- Каждый светофор — это
WHEN
. THEN
задаёт направление движения.ELSE
— это альтернативный маршрут в случае, если условия не выполнились.
Таким образом, SQL-запрос умеет определить, что делать в зависимости от условий.
Полезные материалы
- CASE (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация Microsoft по использованию CASE.
- SQL выражение CASE – W3Schools — обучающее пособие по SQL выражению CASE от W3 Schools.
- SQL CASE | Продвинутый SQL – Mode — инструкция по использованию CASE в SQL-запросах с примерами на практике.
- Выражения CASE – Официальная документация Oracle — подробное описание синтаксиса и использования CASE.
- PostgreSQL: Документация: 16: 9.18. Условные Выражения — официальная документация PostgreSQL о CASE и других условных выражениях.