Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Статистика по датам SQL: учёт null в MIN и MAX функциях

Быстрый ответ

Для отображения NULL в функциях MIN или MAX воспользуйтесь функцией COALESCE. Она преобразует NULL в значения, пределы которых соответствуют вашему запросу. Для MIN используйте "крайне высокое" число, что принудит NULL принять наибольшее значение. Когда работаете с MAX, действуйте наоборот — вводите "чрезвычайно низкое" число.

Для значения минимума:

SQL
Скопировать код
SELECT MIN(COALESCE(column, 'крайне большое число')) FROM table;
-- 'Крайне большое число' замените на число, которое гарантированно больше любого значения в столбце.

Для значения максимума:

SQL
Скопировать код
SELECT MAX(COALESCE(column, 'крайне малое число')) FROM table;
-- 'Крайне малое число' замените на число, которое меньше всех возможных значений в столбце.

Убедитесь, что выбранные значения настолько экстремальны, что очевидно превышают разумный предел значений в вашем столбце.

Кинга Идем в IT: пошаговый план для смены профессии

Внимание к тонкостям

Заменяя NULL, убедитесь, что используемый тип данных совместим со значениями столбца. Например, в числовых столбцах заменяйте NULL числовыми границами:

SQL
Скопировать код
SELECT MIN(COALESCE(startDate, '19000101')) AS СамаяРанняяДата FROM вашаТаблица;
-- Для столбцов с датами '19000101' может служить ранней границей

Если NULL указывает на неоконченный период, функция GETDATE() может предоставить актуальную верхнюю границу:

SQL
Скопировать код
SELECT MAX(COALESCE(endDate, GETDATE())) AS СамаяПоздняяДата FROM вашаТаблица;
-- Воспринимайте NULL как "текущее время", что обозначит сегодняшнюю дату.

Группировка с учетом NULL

При использовании GROUP BY совместно с MIN и MAX следует быть осторожным, чтобы NULL не искажал результаты. Группируйте данные по ключевому полю для корректной обработки NULL:

SQL
Скопировать код
SELECT RecordID, MIN(COALESCE(startDate, '19000101')), MAX(COALESCE(endDate, GETDATE()))
FROM вашаТаблица
GROUP BY RecordID; -- В каждой группе NULL рассматривается как значимое значение.

Такой подход сохраняет телесность данных и учитывает значения NULL при расчетах в группах.

Визуализация

Отображение процесса включения значений NULL в функции MIN или MAX можно представить как ступеньки:

СтупеньВысота
№15 см
№2NULL<-- Эта ступень не видна, но на самом деле это уровень пола (0 см)!
№310 см

Считая невидимую ступеньку (NULL) нулевой отметкой, мы можем учесть ее:

SQL
Скопировать код
SELECT MIN(COAALESCE(Высота, 0)) as НаименьшаяВысотаСтупеньки FROM Лестница;
-- Таким образом, мы учитываем и скрытую ступеньку.

Или когда требуется найти самую низкую точку:

Самая нижняя точка 📉:

|   |   
|   | №3
|   | №3   
| №2| №1 
|___|___|

COALESCE заменяет невидимую ступеньку NULL на действительное значение (0 см), включая ее в расчет MIN.

Переходим к альтернативам

NULLIF в арсенале

Используйте NULLIF для исключения определенных значений из MIN или MAX. Если они соответствуют определенному значению, они преобразуются в NULL:

SQL
Скопировать код
SELECT MIN(NULLIF(столбец, 'значение для исключения')) FROM таблица;
-- Таким образом, мы исключаем 'значение для исключения' из учета при определении минимума.
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Счет идет на подсчет

COUNT(столбец) подсчитывает только не-NULL значения, в то время как COUNT(*) учитывает все записи:

SQL
Скопировать код
SELECT
    COUNT(endDate), -- Только цифровые значения, исключая NULL
    COUNT(*) -- Все записи, включая NULL
FROM вашаТаблица;

Вызовем операторы CASE

CASE может быть полезным при учете NULL в расчетах в сложных условиях:

SQL
Скопировать код
SELECT 
    MIN(CASE WHEN column IS NULL THEN 'замещающее значение' ELSE column END) 
FROM table; -- С 'CASE' легко управлять обработкой NULL.

Полезные материалы

  1. Разбор различий и производительности между ISNULL и COALESCE на Stack Overflow.
  2. Изучение функции MAX() на W3Schools и способов обхода значения NULL.
  3. Изучение функции MIN() на W3Schools и влияние NULL на SQL-запросы.
  4. Другие способы управления NULL значениями с помощью CASE на сайте Essential SQL.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как заменить NULL на значения для функции MIN в SQL?
1 / 5