Функция COALESCE() в SQL: обработка NULL и приоритет значений

COALESCE() принимает список аргументов и возвращает первый из них, который не равен NULL. Это стандартный инструмент аналитика для замены пропусков на значение по умолчанию, выбора приоритетного источника данных и защиты вычислений от NULL. В отличие от IFNULL/NVL, COALESCE — стандарт ANSI SQL и работает во всех СУБД.

Синтаксис

COALESCE(значение1, значение2, …, значение_по_умолчанию)

Примеры использования

Пример 1: Заменить NULL в сумме скидки на 0

SELECT order_id,
       amount - COALESCE(discount, 0) AS net_amount
FROM orders;

Результат:

order_id | net_amount
1        | 950
2        | 1200

Пример 2: Приоритет источников телефона

SELECT user_id,
       COALESCE(phone_verified, phone_profile, phone_order, 'нет данных') AS phone
FROM users;

Результат:

user_id | phone
1       | +79001112233
2       | нет данных
Порешать SQL-задачи в тренажёре →

Типичная ошибка

COALESCE вычисляет аргументы слева направо и останавливается на первом не-NULL — но некоторые СУБД могут вычислить и «лишние» выражения, поэтому не полагайся на неё как на защиту от ошибок в тяжёлых подзапросах. И помни: COALESCE не спасает от «NULL = NULL» в JOIN/сравнениях — там нужен IS NULL или NULLIF.

Где спрашивают на собеседовании

COALESCE — базовый must-know: вопросы про обработку NULL и «первое непустое значение» встречаются на любом собеседовании. Часто идёт в паре с NULLIF (защита деления на ноль) и с LEFT JOIN, где непарные строки дают NULL.

FAQ: частые вопросы про COALESCE

Чем COALESCE отличается от IFNULL и NVL?

IFNULL (MySQL/SQLite) и NVL (Oracle) принимают ровно два аргумента и специфичны для своей СУБД. COALESCE — стандарт ANSI, принимает любое число аргументов и работает везде. Для переносимости выбирай COALESCE.

Как COALESCE помогает при делении на ноль?

Напрямую не помогает от нуля — от нуля защищает NULLIF(знаменатель, 0). А COALESCE удобна, чтобы заменить итоговый NULL на 0: COALESCE(x / NULLIF(y, 0), 0).

Что вернёт COALESCE, если все аргументы NULL?

NULL. COALESCE возвращает NULL только когда каждый аргумент NULL, поэтому последним часто ставят гарантированное значение по умолчанию.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

null-handling · Условная логика

Другие функции SQL

NULLIF · CASE WHEN · COUNT · CAST · ROUND · CONCAT

Открыть SQL-тренажёр (565 задач) →