Условные функции и выражения
Функции, возвращающие один из своих аргументов путём оценки по принципу «если-иначе».
CASE
Синтаксис:
CASE WHEN condition THEN result
[WHEN ...]
[ELSE default_result]
END Входные данные:
Используется один или несколько пунктов WHEN условие THEN результат, и выражение может необязательно содержать пункт ELSE значение_по_умолчанию. Каждое условие должно быть булевым выражением.
Выходные данные: одно из выражений результат, если соответствующее WHEN условие оценивается как true, или выражение значение_по_умолчанию, если все пункты WHEN условие оцениваются как false. Если необязательный пункт ELSE значение_по_умолчанию отсутствует и все пункты WHEN условие оцениваются как false, то null возвращается.
Описание: Выражение CASE — это общее условное выражение, которое имитирует операторы if/else других языков программирования. Если результат условия — true, значение выражения результата, которое следует за условием, будет возвращено. Последующие пункты when будут пропущены и не обработаны.
SELECT CASE WHEN 1 > 2 THEN 'elastic'
WHEN 2 <= 3 THEN 'search'
END AS "case";
case
---------------
search SELECT CASE WHEN 1 > 2 THEN 'elastic'
WHEN 2 > 10 THEN 'search'
END AS "case";
case
---------------
null SELECT CASE WHEN 1 > 2 THEN 'elastic'
WHEN 2 > 10 THEN 'search'
ELSE 'default'
END AS "case";
case
---------------
default В качестве варианта, выражение case может быть выражено синтаксисом, похожим на switch-case других языков программирования:
CASE expression
WHEN value1 THEN result1
[WHEN value2 THEN result2]
[WHEN ...]
[ELSE default_result]
END В этом случае оно преобразуется внутренне в:
CASE WHEN expression = value1 THEN result1
[WHEN expression = value2 THEN result2]
[WHEN ...]
[ELSE default_result]
END SELECT CASE 5
WHEN 1 THEN 'elastic'
WHEN 2 THEN 'search'
WHEN 5 THEN 'elasticsearch'
END AS "case";
case
---------------
elasticsearch SELECT CASE 5
WHEN 1 THEN 'elastic'
WHEN 2 THEN 'search'
WHEN 3 THEN 'elasticsearch'
ELSE 'default'
END AS "case";
case
---------------
default Все выражения результата должны иметь совместимые типы данных. Более конкретно, все выражения результата должны иметь совместимый тип данных с первым не-NULL выражением результата. Например:
для следующего запроса:
CASE WHEN a = 1 THEN null
WHEN a > 2 THEN 10
WHEN a > 5 THEN 'foo'
END будет возвращено сообщение об ошибке, указывающее, что foo имеет тип данных ключевое_слово, который не соответствует ожидаемому типу данных целое (на основе результата 10).
Условное разбиение на группы
CASE может использоваться в качестве ключа GROUP BY в запросе для облегчения пользовательского разбиения на группы и присвоения описательных имён этим группам. Если, например, значений для ключа слишком много, или просто интервалы этих значений представляют больший интерес, чем каждое отдельное значение, CASE может создавать пользовательские группы, как в следующем примере:
SELECT count(*) AS count,
CASE WHEN NVL(languages, 0) = 0 THEN 'zero'
WHEN languages = 1 THEN 'one'
WHEN languages = 2 THEN 'bilingual'
WHEN languages = 3 THEN 'trilingual'
ELSE 'multilingual'
END as lang_skills
FROM employees
GROUP BY lang_skills
ORDER BY lang_skills; С помощью этого запроса можно создать обычные группы значений 0, 1, 2, 3 с описательными именами, а каждое значение >= 4 попадает в группу multilingual.
COALESCE
Синтаксис:
COALESCE(
expression,
expression,
...) Входные данные:
| 1-ое выражение | |
| 2-ое выражение |
…
N-ое выражение
COALESCE может принимать произвольное количество аргументов.
Выходные данные: одно из выражений или null
Описание: Возвращает первый из своих аргументов, который не является null. Если все аргументы null, возвращается null.
SELECT COALESCE(null, 'elastic', 'search') AS "coalesce";
coalesce
---------------
elastic SELECT COALESCE(null, null, null, null) AS "coalesce";
coalesce
---------------
null GREATEST
Синтаксис:
GREATEST(
expression,
expression,
...) Входные данные:
| 1-ое выражение | |
| 2-ое выражение |
…
N-ое выражение
GREATEST может принимать произвольное количество аргументов, и все они должны быть одного типа данных.
Выходные данные: одно из выражений или null
Описание: Возвращает аргумент с наибольшим значением, которое не равно null. Если все аргументы null, возвращается null.
SELECT GREATEST(null, 1, 2) AS "greatest";
greatest
---------------
2 SELECT GREATEST(null, null, null, null) AS "greatest";
greatest
---------------
null IFNULL
Синтаксис:
IFNULL(
expression,
expression) Входные данные:
| 1-ое выражение | |
| 2-ое выражение |
Выходные данные: 2-ое выражение, если 1-ое выражение равно null, в противном случае 1-ое выражение.
Описание: Вариант COALESCE с двумя аргументами. Возвращает первый из своих аргументов, который не является null. Если все аргументы null, возвращается null.
SELECT IFNULL('elastic', null) AS "ifnull";
ifnull
---------------
elastic SELECT IFNULL(null, 'search') AS "ifnull";
ifnull
---------------
search IIF
Синтаксис:
IIF(
expression,
expression,
[expression]) Входные данные:
| булевое условие для проверки | |
| возвращаемое значение, если булевое условие оценивается как | |
| возвращаемое значение, если булевое условие оценивается |
Выходные данные: 2-ое выражение, если 1-ое выражение (условие) оценивается как true. Если оно оценивается как false, возвращается 3-е выражение. Если 3-е выражение не указано, возвращается null.
Описание: Условная функция, реализующая стандартную логику IF <условие> THEN <результат1> ELSE <результат2> языков программирования. Если 3-е выражение не указано и условие оценивается как false, возвращается null.
SELECT IIF(1 < 2, 'TRUE', 'FALSE') AS result1, IIF(1 > 2, 'TRUE', 'FALSE') AS result2;
result1 | result2
---------------+---------------
TRUE |FALSE SELECT IIF(1 < 2, 'TRUE') AS result1, IIF(1 > 2 , 'TRUE') AS result2;
result1 | result2
---------------+---------------
TRUE |null IIF функции могут быть объединены для реализации более сложной логики, имитирующей выражение CASE. Например:
IIF(a = 1, 'one', IIF(a = 2, 'two', IIF(a = 3, 'three', 'many')))
ISNULL
Синтаксис:
ISNULL(
expression,
expression) Входные данные:
| 1-ое выражение | |
| 2-ое выражение |
Выходные данные: 2-ое выражение, если 1-ое выражение равно null, в противном случае 1-ое выражение.
Описание: Вариант COALESCE с двумя аргументами. Возвращает первый из своих аргументов, который не является null. Если все аргументы null, возвращается null.
SELECT ISNULL('elastic', null) AS "isnull";
isnull
---------------
elastic SELECT ISNULL(null, 'search') AS "isnull";
isnull
---------------
search LEAST
Синопсис:
LEAST(
expression,
expression,
...) Входные данные:
| 1-е выражение | |
| 2-е выражение |
…
N-е выражение
Функция LEAST может принимать произвольное количество аргументов, и все они должны быть одного типа данных.
Выходные данные: одно из выражений или null
Описание: Возвращает аргумент, имеющий наименьшее значение, которое не равно NULL. Если все аргументы равны NULL, то возвращает null.
SELECT LEAST(null, 2, 1) AS "least";
least
---------------
1 SELECT LEAST(null, null, null, null) AS "least";
least
---------------
null NULLIF
Синопсис:
NULLIF(
expression,
expression) Входные данные:
| 1-е выражение | |
| 2-е выражение |
Выходные данные: null, если два выражения равны, в противном случае — 1-е выражение.
Описание: Возвращает null, если два входных выражения равны, в противном случае возвращает 1-е выражение.
SELECT NULLIF('elastic', 'search') AS "nullif";
nullif
---------------
elastic SELECT NULLIF('elastic', 'elastic') AS "nullif";
nullif:s
---------------
null NVL
Синопсис:
NVL(
expression,
expression) Входные данные:
| 1-е выражение | |
| 2-е выражение |
Выходные данные: 2-е выражение, если 1-е выражение равно NULL, в противном случае — 1-е выражение.
Описание: Вариант функции COALESCE с только двумя аргументами. Возвращает первый из своих аргументов, который не равен NULL. Если все аргументы равны NULL, то возвращает null.
SELECT NVL('elastic', null) AS "nvl";
nvl
---------------
elastic SELECT NVL(null, 'search') AS "nvl";
nvl
---------------
search
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/sql-functions-conditional.html