Справочник по функциям

CASE

Конструкция SQL

Проверяет ветки WHEN по порядку и возвращает результат первой подходящей.

MySQL 8.1
CASE [expression] WHEN condition THEN result [WHEN ...] [ELSE result] END

Параметры

expressionнеобязательный
Выражение, которое сравнивается со значениями в ветках WHEN
conditionBOOLEAN
Условие ветки, а если указано expression — значение для сравнения с ним
result
Значение, которое возвращает ветка, если её условие выполнено
ELSE resultнеобязательный
Значение, если ни одна ветка не подошла

Возвращаемое значение

Результат первой подходящей ветки; NULL, если ни одна ветка не подошла и нет ELSE

Примеры

Сравнение двух чисел

MySQL 8.1
SELECT CASE
		WHEN 10 > 5 THEN 'greater'
		ELSE 'less or equal'
	END AS result;
result
greater

Роль в семье по статусу

MySQL 8.1
SELECT member_name,
	CASE
		WHEN status IN ('father', 'mother') THEN 'parent'
		ELSE 'child'
	END AS role
FROM FamilyMembers;
member_namerole
Headley Quinceyparent
Flavia Quinceyparent
Andie Quinceychild
Lela Quinceychild
Annie Quinceychild
Ernest Forrestparent
Constance Forrestparent
Wednesday Addamschild

Простая форма без ELSE

MySQL 8.1
SELECT member_name,
	CASE
		status
		WHEN 'father' THEN 'dad'
		WHEN 'mother' THEN 'mom'
	END AS parent_role
FROM FamilyMembers;
member_nameparent_role
Headley Quinceydad
Flavia Quinceymom
Andie Quincey<NULL>
Lela Quincey<NULL>
Annie Quincey<NULL>
Ernest Forrestdad
Constance Forrestmom
Wednesday Addams<NULL>

Подробности

У CASE две формы. Без expression после каждого WHEN пишется своё условие. С expression оно сравнивается со значением каждой ветки через =, поэтому ветка WHEN NULL никогда не срабатывает: для проверки на NULL используйте форму без expression и условие WHEN expression IS NULL.

Смотрите также

Где изучить