TGViewer
В мире больших данных В мире больших данных @big_data_systems_analysis · 301 subscribers
Post #84 115
NULL и агрегатные функции

И вновь разговоры про NULL. Особое внимание заслуживает работа с агрегатными функциями в выражениях, включающих NULL-значения.

NULL представляет собой отсутствие значения или неизвестное состояние, и поэтому добавляет сложности при взаимодействии с агрегатными функциями. Распространенной ошибкой является предположение, что NULL ведет себя как обычное значение. Но это не так!

Вернёмся к основам. Одним из фундаментальных аспектов SQL является трехзначная логика (3VL), различающая TRUE, FALSE и UNKNOWN. И при применении агрегатных функций к выражениям с NULL-значениями важно учитывать состояние UNKNOWN, которое вносит NULL. Ничего не понятно? 😁 Рассмотрим на конкретных примерах.

Предположим у нас есть таблица table_for_count:
column_1
49
60
NULL
12
50
11
NULL
5


select * from table_for_count

Результат: 8

select count(column_1) from table_for_count

Результат: 6 ☹️

В то время как COUNT(*) посчитает все строки, независимо от наличия значений NULL, COUNT(column_1) исключит в подсчёте строки, где указанный столбец равен NULL.

Аналогично, работают функции SUM, AVG, MAX и MIN. Я отдельно выделила AVG, чтобы вы обратили на него внимание.

table_for_avg:
column_2
1
NULL
2


select avg(column_2) from table_for_avg

Результат: 1.5 (в некоторых расчётах — это будет верным, но может быть и нет — учитывайте контекст запроса!)


Что делать?
Хорошая практика — использование функций COALESCE или NVL для замены NULL-значений на значения по умолчанию или определенные пользователем до применения агрегатной функции. Важно устанавливать значения осмысленно, иначе это внесёт ещё больше хаоса в результаты запроса.
Ещё один вариант — использование оператора CASE для создания условной логики и обработки NULL значений.
Выбор метода зависит от конкретной бизнес-задачи и, конечно же, СУБД (и не забывайте проверять план выполнения запроса для лучшего решения).

select count(coalesce(column_1, 0)) from table_for_count;

Результат: 8 😍

Отсутствие понимания взаимодействия агрегатных функций с выражениями, включающими NULL значения, может привести к появлению некачественной отчетности и интерпретации данных, что впоследствии подорвёт доверие ко всей аналитике. Поэтому будьте на чеку и учитывайте NULL-значения там, где это необходимо.

Другие заметки про работу с NULL-значениями можно найти по хэштегу 👇

#null
  • ❤ 1
More from @big_data_systems_analysis
  1. Jul 28, 2026Продолжая тему тех самых SQL-скриптов на 1200 строк, хочу напомнить одну важную вещь, кото…
  2. Jul 15, 2026Борьба с ветряными мельницами Думаю, многим из вас уже набили оскомину разговоры об ИИ. Мн…
  3. Mar 8, 2026В этот день желаю женской части аудитории верить в себя и позволять быть себе любой без ог…
  4. Mar 6, 2026Этот мем — точная копия одного рабочего дня, который я, кажется, прожила уже раз двести 😄…
  5. Mar 4, 2026Знаете, какая фраза чаще всего дорого обходится компании? "Работает — и ладно" 🥂 Результа…
  6. Feb 26, 2026Дисциплина, конечно, прошла мимо меня 😄 в черновиках 1000 и 1 пост, но ни один из них не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →