Перейти к основному содержимому

case

Описание

CASE — это условное выражение. Оно возвращает результат в предложении THEN, если условие в предложении WHEN оценивается как истинное. Если ни одно из условий не оценивается как истинное, возвращается результат в необязательном предложении ELSE. Если ELSE отсутствует, возвращается NULL.

Синтаксис

Выражение CASE имеет две формы:

  • Простой CASE
CASE expression
WHEN expression1 THEN result1
[WHEN expression2 THEN result2]
...
[WHEN expressionN THEN resultN]
[ELSE result]
END

В этом синтаксисе expression сравнивается с каждым выражением в предложении WHEN. Если найдено равное выражение, возвращается результат в предложении THEN. Если равное выражение не найдено, возвращается результат в предложении ELSE, если ELSE присутствует.

  • Поисковый CASE
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
...
[WHEN conditionN THEN resultN]
[ELSE result]
END

В этом синтаксисе каждое условие в предложении WHEN оценивается до тех пор, пока одно из них не станет истинным, и возвращается соответствующий результат в предложении THEN. Если ни одно условие не оценивается как истинное, возвращается результат в предложении ELSE, если ELSE присутствует.

Первый CASE эквивалентен второму следующим образом:

CASE WHEN expression = expression1 THEN result1
[WHEN expression = expression2 THEN result2]
...
[WHEN expression = expressionN THEN resultN]
[ELSE result]
END

Параметры

  • expressionN: выражение для сравнения. Несколько выражений должны быть совместимы по типам данных.

  • conditionN: условие, которое может оцениваться как значение BOOLEAN.

  • resultN должны быть совместимы по типам данных.

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

Возвращаемое значение имеет общий тип всех типов в предложении THEN.

Примеры

Предположим, что таблица test_case содержит следующие данные:

CREATE TABLE test_case(
name STRING,
gender INT,
) DISTRIBUTED BY HASH(name);

INSERT INTO test_case VALUES
("Andy",1),
("Jules",0),
("Angel",-1),
("Sam",null);

SELECT * FROM test_case;
+-------+--------+
| name | gender |
+-------+--------+
| Angel | -1 |
| Andy | 1 |
| Sam | NULL |
| Jules | 0 |
+-------+--------+-------+

Использование простого CASE

  • ELSE указан, и результат в ELSE возвращается, если равное выражение не найдено.
mysql> select gender, case gender 
when 1 then 'male'
when 0 then 'female'
else 'error'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| NULL | error |
| 0 | female |
| 1 | male |
| -1 | error |
+--------+------------+
  • ELSE не указан, и NULL возвращается, если ни одно условие не оценивается как истинное.
select gender, case gender 
when 1 then 'male'
when 0 then 'female'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| 1 | male |
| -1 | NULL |
| NULL | NULL |
| 0 | female |
+--------+------------+

Использование поискового CASE без указания ELSE

mysql> select gender, case when gender = 1 then 'male'
when gender = 0 then 'female'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| NULL | NULL |
| -1 | NULL |
| 1 | male |
| 0 | female |
+--------+------------+

Ключевые слова

case when, case, case_when, case...when