CASE
Конструкция SQL
Проверяет ветки WHEN по порядку и возвращает результат первой подходящей.
PostgreSQL 17.5
CASE [expression] WHEN condition THEN result [WHEN ...] [ELSE result] ENDПараметры
- expressionнеобязательный
- Выражение, которое сравнивается со значениями в ветках WHEN
- conditionboolean
- Условие ветки, а если указано expression — значение для сравнения с ним
- result
- Значение, которое возвращает ветка, если её условие выполнено
- ELSE resultнеобязательный
- Значение, если ни одна ветка не подошла
Возвращаемое значение
Результат первой подходящей ветки; NULL, если ни одна ветка не подошла и нет ELSE
Примеры
Сравнение двух чисел
PostgreSQL 17.5
SELECT CASE
WHEN 10 > 5 THEN 'greater'
ELSE 'less or equal'
END AS result;Роль в семье по статусу
PostgreSQL 17.5
SELECT member_name,
CASE
WHEN status IN ('father', 'mother') THEN 'parent'
ELSE 'child'
END AS role
FROM FamilyMembers;Простая форма без ELSE
PostgreSQL 17.5
SELECT member_name,
CASE
status
WHEN 'father' THEN 'dad'
WHEN 'mother' THEN 'mom'
END AS parent_role
FROM FamilyMembers;Подробности
У CASE две формы. Без expression после каждого WHEN пишется своё условие. С expression оно сравнивается со значением каждой ветки через =, поэтому ветка WHEN NULL никогда не срабатывает: для проверки на NULL используйте форму без expression и условие WHEN expression IS NULL.