💻
Сценарии использования NULLIFВас когда-нибудь спрашивали на собеседовании о функции NULLIF?
В гайдах к собеседованиям куда чаще встречаются джоины и первичный ключ, а NULLIF опускают. Хотя зря! NULLIF на самом деле — мощный инструмент, который можно использовать в разных ситуациях, чтобы повысить надежность ваших запросов.
✅ Что такое NULLIF и как это использовать?NULLIF — это функция, которая принимает два аргумента и возвращает NULL, если аргументы равны, в противном случае она возвращает первый аргумент. Синтаксис выглядит следующим образом:
NULLIF(выражение 1, выражение 2)
💻
Деление на нольПожалуй, самое полезное, что можно сделать, используя NULLIF — пресечь ошибку деления на ноль.
Это один из самых распространённых вариантов использования. Например, если вы пытаетесь поделить один столбец на другой, и есть вероятность, что во втором столбце (делителе) могут оказаться нули — оберните второй столбец в NULLIF и вы не получите ошибок.
SELECT column1/NULLIF(column2, 0)
FROM table1
То есть когда значение второго столбца равно 0 (аргументы в NULLIF равны), вернется NULL, а не ZeroDivisionError.
💻
Поиск среднего значенияТакая схема будет полезна и при других вычислениях, например среднего значения. Опять же, если есть шанс, что в столбце, по которому считаем среднее, могут оказаться нули, которые не должны влиять на результат — поможет NULLIF.
Например, дана такая таблица:
| column1 | column2 |
|---------|---------|
| 0 | a |
| 7 | a |
Выполнив:
SELECT column2, AVG(column1)
FROM table1
GROUP BY column2;
Получим:
| column2 | avg |
|---------|-----|
| a | 3.5 |
А с использованием NULLIF получим другой результат:
SELECT column2, AVG(NULLIF(column1, 0))
FROM table1
GROUP BY column2;
| column2 | avg |
|---------|-----|
| a | 7 |
💻
Преобразование пустых строкДругой вариант использования NULLIF — преобразование пустых строк в NULL. Например, в таблице некоторые столбцы содержат пустые строки, которые необходимо трактовать как NULL — идеально подходящая ситуация для NULLIF:
SELECT NULLIF(column1, '') FROM table1;
Получим NULL, если столбец 1 содержит пустую строку, что эффективно обработает все пустые строки.
💡 В следующий раз, когда вы будете работать над проектом, попробуйте найти, где бы вы могли использовать NULLIF и убедитесь, как он легко поможет решать сложные задачи и избегать больших CASE/WHEN конструкций. Кстати говоря, NULLIF — это тот же CASE/WHEN, так что, возможно, стоит провести ревизию старых проектов и увидеть потенциальные «use» кейсы.
Если вы и раньше использовали NULLIF, расскажите, в каких интересных задачах он вам пригодился? И ставьте 🔥, если было полезно!📈
Симулейтив | 📱
ВК | 📱
YouTube | 📱
Канал о DS