NULLIF: возврат NULL при совпадении двух значений

Что делает функция NULLIF? 🧐

NULLIF — это одна из тех скромных, но невероятно полезных функций SQL, которая работает как тихий страж ваших данных. Её задача проста:

Если два переданных значения равны — вернуть NULL.
Если не равны — вернуть первое значение.

Синтаксис:

NULLIF(value1, value2)

Зачем это нужно? 🤔

Представьте, что вы аналитик в интернет-магазине и работаете с данными о скидках. Некоторые товары имеют скидку 0% (что по сути равно отсутствию скидки), и вам нужно заменить такие случаи на NULL для чистоты анализа.

Вот как NULLIF спасает ситуацию:

SELECT 
    product_name,
    NULLIF(discount_percent, 0) AS clean_discount
FROM products;

Что произойдёт:
- Если discount_percent = 0 → вернётся NULL
- Если discount_percent > 0 → вернётся исходное значение


Реальные кейсы применения 🔥

1. Очистка данных перед делением

Деление на ноль — классическая ошибка. NULLIF помогает избежать её элегантно:

SELECT 
    revenue / NULLIF(orders_count, 0) AS avg_revenue_per_order
FROM sales;

2. Замена пустых строк

Иногда пустые строки ('') нужно трактовать как NULL:

SELECT 
    NULLIF(customer_comment, '') AS meaningful_comments
FROM feedback;

3. Сравнение версий данных

В ETL-процессах часто нужно выявить изменения:

SELECT 
    id,
    NULLIF(old_value, new_value) AS changed_value
FROM data_updates;

Как NULLIF связан с COALESCE? 🤝

Эти функции — лучшие друзья! COALESCE возвращает первое NON-NULL значение, а NULLIF может создавать NULL'ы для обработки.

Пример комбо: Замена нулей на читаемое значение:

SELECT 
    COALESCE(NULLIF(discount, 0), 'No discount') AS discount_label
FROM products;

Подводные камни ⚠️

  1. Типы данных должны совпадать:
    sql NULLIF('10', 10) -- Ошибка в некоторых СУБД (разные типы)

  2. NULL не равен NULL:
    Функция вернёт NULL ТОЛЬКО при явном равенстве аргументов, а не при сравнении двух NULL'ов.

  3. Особенности СУБД:
    В PostgreSQL NULLIF строгий к типам, а в MySQL — более лоялен. Проверяйте документацию!


Практикуемся на реальных данных 🛠️

Задача: В таблице employee_salaries есть зарплаты и бонусы. Некоторые бонусы равны 0, что означает их отсутствие. Нужно:

  1. Заменить нулевые бонусы на NULL
  2. Посчитать общий доход (salary + bonus), игнорируя NULL

Решение:

SELECT 
    employee_id,
    salary,
    NULLIF(bonus, 0) AS clean_bonus,
    salary + COALESCE(NULLIF(bonus, 0), 0) AS total_income
FROM employee_salaries;

Разбор:

  • Сначала NULLIF превращает 0 в NULL
  • COALESCE подменяет NULL обратно на 0 для арифметики

Философия NULLIF 🧠

Эта функция — идеальный пример принципа "чем проще, тем лучше" в SQL. Она не пытается делать всё, но решает одну задачу безупречно: превращает ненужные значения в NULL, чтобы вы могли чисто и прозрачно работать с данными дальше.

Попробуйте применить NULLIF в своём следующем запросе — вы удивитесь, как часто он оказывается полезен! 🚀

Скрыть рекламу навсегда

🌱 Индвидидулаьные занятия

Индивидуальные онлайн-занятия по программированию для детей и подростков

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие