JavaRush /Курси /SQL SELF /Приклади роботи з NULL у реальних задачах: розрахунки, фі...

Приклади роботи з NULL у реальних задачах: розрахунки, фільтрація, сортування

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

Робота з NULL трапляється у найрізноманітніших сценаріях: від обробки відсутніх даних у звітах до фільтрації та сортування. Якби був вибір між відсутністю значення в таблиці і дивним числом типу 9999, більшість обрало б NULL — так, погоджуюсь, що це не найзручніше, але зате чесно. Давай розглянемо кілька типових кейсів.

Приклад: сортування товарів з відсутніми цінами

Уявімо, що ми керуємо інтернет-магазином, і у нас є таблиця товарів:

product_id name price
1 Телефон 45000
2 Ноутбук NULL
3 Камера 25000
4 Розумний годинник NULL

Ми хочемо відсортувати товари за ціною, при цьому товари без ціни (NULL) мають бути в кінці.

SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;

Результат:

product_id name price
3 Камера 25000
1 Телефон 45000
2 Ноутбук NULL
4 Розумний годинник NULL

Зверни увагу на ключову конструкцію NULLS LAST. За замовчуванням у PostgreSQL для ASC NULL значення йдуть на початок, але з цим параметром ми переносимо їх у кінець.

Приклад: фільтрація студентів без дати народження

У нас є таблиця студентів, і ми хочемо вибрати лише тих, у кого не вказана дата народження.

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

Запит:

SELECT student_id, name
FROM students
WHERE birth_date IS NULL;

Результат:

student_id name
2 Anna Song
4 Maria Chi

Ми успішно витягнули інформацію про студентів, у яких дата народження невідома.

Приклади використання функцій для обробки NULL

Приклад: розрахунок підсумкової суми з урахуванням можливих NULL

У таблиці замовлень зберігаються суми замовлень. Але дані не завжди заповнені, і нам треба враховувати, що в таких випадках сума може бути 0.

Приклад даних:

order_id customer_name order_amount
1 Alex 1200
2 Maria 2500
3 Max NULL
4 Xena 3100

Запит:

SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;

Результат:

total_amount
6800

Ми використовуємо COALESCE(order_amount, 0), щоб замінити NULL на 0 перед підсумовуванням. Це дозволяє уникнути помилок або некоректних підрахунків.

Приклад: вивід тексту замість NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

У звіті треба вивести текст "Не вказано" для всіх порожніх даних замість NULL.

SELECT
    customer_name, 
    COALESCE(order_amount::TEXT, 'Не вказано') AS order_status
FROM orders;

Результат:

customer_name order_status
Alex 1200
Maria 2500
Max Не вказано
Xena 3100

COALESCE() дозволяє показати потрібний текст, якщо значення NULL.

Складні сценарії роботи з NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Наша задача — відсортувати замовлення так, щоб замовлення з відсутньою сумою були на початку, а далі — за спаданням від найбільшої суми до найменшої.

SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;

Результат:

customer_name order_amount
Max NULL
Xena 3100
Maria 2500
Alex 1200

Тут ми використали NULLS FIRST, щоб розмістити NULL значення перед усіма іншими.

Приклад: фільтрація даних із заміною NULL значень

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

У деяких звітах треба вивести лише ті рядки, де значення заповнене, або замінити його на "Невідомо", якщо воно NULL.

SELECT
    student_id, 
    name, 
    COALESCE(birth_date::TEXT, 'Невідомо') AS birth_date_info
FROM students;

Результат:

student_id name birth_date_info
1 Otto Art 2000-01-15
2 Anna Song Невідомо
3 Alex Lin 1999-05-10
4 Maria Chi Невідомо

Це особливо корисно при складанні звітів, де важливо показати, що дані відсутні.

Практичні поради

Робота з NULL вимагає підвищеної уважності. Ось кілька корисних порад:

  • Використовуй IS NULL і COALESCE() для перевірки та заміни відсутніх значень.
  • Пам’ятай, що агрегатні функції ігнорують NULL, окрім COUNT(*).
  • Для сортування пам’ятай про ключові слова NULLS FIRST і NULLS LAST.
  • У звітах завжди вказуй, як ти обробляєш NULL, щоб уникнути непорозумінь із колегами.

Такі знання допоможуть тобі не лише писати правильні запити, а й справити враження на співбесіді. Бо вміння працювати з реальними даними завжди цінується більше, ніж просто теорія!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ