JavaRush /Курси /SQL SELF /Функція NULLIF() — синтаксис і приклади використання

Функція NULLIF() — синтаксис і приклади використання

SQL SELF
Рівень 9 , Лекція 4
Відкрита

Давай поговоримо ще про одну функцію для роботи з загадковим NULLNULLIF(). Вона допоможе нам у ситуаціях, коли певні значення треба замінити на NULL, щоб коректно обробляти дані. Пристібай ремені, це буде цікава подорож!

Функція NULLIF() — це крутий інструмент у PostgreSQL, який дозволяє тобі порівняти два значення і повернути NULL, якщо вони однакові, або повернути перше значення, якщо вони різні. Вона ніби каже: "Якщо ці значення однакові — забудь про них!"

Ось простий синтаксис функції:

NULLIF(value1, value2)

Якщо value1 і value2 однакові, результатом буде NULL. Якщо різні — результатом буде value1.

Приклад:

SELECT NULLIF(10, 10); -- Результат: NULL
SELECT NULLIF(10, 20); -- Результат: 10
SELECT NULLIF('hello', 'hello'); -- Результат: NULL
SELECT NULLIF('hello', 'world'); -- Результат: 'hello'

Просто, правда? Тепер давай спробуємо застосувати цю функцію в реальних задачах.

Приклад 1: Запобігання діленню на нуль

Ділення на нуль — це жах для будь-якого програміста. В SQL спроба поділити на нуль видасть помилку. Ось тут і виручає NULLIF().

Уяви ситуацію: у нас є таблиця sales з двома стовпцями: revenue (дохід) і expenses (витрати). Ми хочемо порахувати рентабельність витрат (revenue / expenses), але іноді витрати дорівнюють нулю. Якщо просто виконати запит без перевірки — отримаємо помилку ділення на нуль.

Таблиця sales:

revenue expenses
1000 200
1500 0
2000 250

Помилковий запит:

SELECT revenue / expenses AS profitability
FROM sales;
-- Помилка: ділення на нуль!

Рішення з NULLIF():

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

Результат:

profitability
5.00
NULL
8.00

Тепер, якщо expenses дорівнює 0, NULLIF(expenses, 0) повертає NULL, а ділення на NULL не викликає помилки, а просто повертає NULL.

Приклад 2: Заміна однакових значень на NULL

Уяви, що у тебе є таблиця з даними про студентів, де є стовпці first_name і preferred_name. Іноді студенти хочуть використовувати своє справжнє ім'я, а іноді обирають щось інше. Якщо обидва імені однакові — немає сенсу показувати preferred_name.

Таблиця students:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

Запит з NULLIF():

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

Результат:

first_name display_name
John Johnny
Anna NULL
Alex Lex

Коли preferred_name і first_name однакові, результатом буде NULL.

Приклад 3: Фільтрація даних

Іноді треба вибрати лише ті рядки, де значення у двох стовпцях різні. Наприклад, у нас є таблиця замовлень з original_price і discounted_price. Треба знайти замовлення, де була знижка.

Таблиця orders:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

Запит з NULLIF():

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

Результат:

order_id original_price discounted_price
2 200 180

Тільки замовлення зі знижкою потрапили в результат.

Практичні кейси використання NULLIF()

Кейс 1: Вибір опціонального значення

Працюючи з даними, іноді треба вибрати значення з кількох стовпців, ігноруючи ті, що дорівнюють певному значенню. Наприклад, у нас є список співробітників з їх зарплатами: base_salary і bonus. Якщо бонус дорівнює 0, ми хочемо встановити його в 999.

Таблиця employees:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

Запит з NULLIF():

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

Результат:

employee_id total_salary
1 60000
2 40999
3 65000

Якщо bonus дорівнює 0, він перетвориться на 999.

Кейс 2: Підрахунок рядків

Можна використовувати NULLIF() для спрощення складних умов фільтрації. Наприклад, у нас є таблиця користувачів і ми хочемо одним запитом дізнатися і їх загальну кількість, і кількість зареєстрованих користувачів (без статусу guest).

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

Ось так, за допомогою всього однієї функції NULLIF() можна вирішити купу задач: від запобігання помилкам до простого покращення читабельності коду. Тепер, коли ти знаєш, як вона працює, ти вже на крок ближче до майстерності в роботі з даними у PostgreSQL.

1
Опитування
Робота з NULL, рівень 9, лекція 4
Недоступний
Робота з NULL
Робота з NULL
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ