Условные функции и выражения
Функции, возвращающие один из своих аргументов, оценивая их по принципу if-else.
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 других языков программирования. Если результат условия истинен, значение выражения результата, которое следует за условием, будет возвращено; последующие элементы 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 Все выражения результатов должны иметь совместимые типы данных. Более конкретно, все выражения результатов должны иметь совместимый тип данных с первым непустым выражением результата. Например:
для следующего запроса:
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 <condition> THEN <result1> ELSE <result2> языков программирования. Если 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/7.17/sql-functions-conditional.html