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, чтобы избежать недоразумений с коллегами.

Такие знания помогут вам не только написать правильные запросы, но и произвести впечатление на собеседовании. Ведь умение работать с реальными данными всегда ценится выше, чем просто теория!

2
Задача
SQL SELF, 10 уровень, 3 лекция
Недоступна
Фильтрация строк с NULL значениями
Фильтрация строк с NULL значениями
2
Задача
SQL SELF, 10 уровень, 3 лекция
Недоступна
Расчет итоговой суммы с обработкой NULL
Расчет итоговой суммы с обработкой NULL
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 49
27 января 2026
❤️
Anemon Уровень 13 Expert
31 августа 2025
По моим ощущениям, нейронка иногда забывает что мы учимся работать с Postgres SQL, и предлагает "задачки" для других БД, где null может вызывать ошибки, а не просто игнорироваться.