Перейти к содержанию

COALESCE

Функция COALESCE возвращает первый из переданных аргументов expression, который не равен NULL. Функция вернет NULL, только если все ее аргументы равны NULL. Функции должно быть передано минимум два аргумента.

Преимущества:

  • исключение ошибок и проверок, связанных с обработкой NULL
  • оптимизация и упрощение запросов
  • возможность создания псевдонимов для NULL (nil) — аргументы должны быть приведены к одному типу данных с помощью функции CAST

Синтаксис

COALESCE ( expression , expression )

Выражение

Диаграмма

NOT table . column literal case cast coalesce current_date like ilike substr to_char to_date trim lower upper NOT EXISTS ( dql ) ( dql ) ( expression , ) IS NOT NULL TRUE FALSE UNKNOWN expression NOT BETWEEN expression AND + - * / <> != >= > <= < = NOT IN || AND OR expression

Литерал

Диаграмма

TRUE FALSE NULL decimal double integer string unsigned $ unsigned ?

Примеры

Тестовые таблицы

Примеры использования команд включают в себя запросы к тестовым таблицам.

Функция COALESCE возвращает первый непустой результат
sql> SELECT COALESCE(NULL::STRING, 'First', NULL::STRING, 'Second');
+-------+
| col_1 |
+=======+
| First |
+-------+
(1 rows)
Функция COALESCE возвращает единственный непустой результат
sql> SELECT COALESCE(NULL::STRING, NULL::STRING, 'Check!');
+--------+
| col_1  |
+========+
| Check! |
+--------+
(1 rows)
Функция COALESCE возвращает NULL
sql> SELECT COALESCE(NULL, NULL, NULL, NULL);
+-------+
| col_1 |
+=======+
| nil   |
+-------+
(1 rows)
Внешнее левое соединение — см. Использование JOIN
sql> SELECT
    items.name,
    COALESCE(items.stock::STRING, 'Not specified') AS "items.stock",
    COALESCE(orders.amount::STRING, 'Not specified') AS "orders.amount"
FROM items
LEFT JOIN orders
ON items.name = orders.item;
+---------+---------------+---------------+
| name    | items.stock   | orders.amount |
+=========================================+
| bricks  | 1123          | Not specified |
|---------+---------------+---------------|
| panels  | 998           | Not specified |
|---------+---------------+---------------|
| piles   | 177           | Not specified |
|---------+---------------+---------------|
| bars    | 90211         | 100           |
|---------+---------------+---------------|
| blocks  | 16            | 20000         |
+---------+---------------+---------------+
(5 rows)