TGViewer
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) @dima_sqlit · 2.26K subscribers
Post #54 1.51K
👨‍💻 Казалось бы, агрегатные функции в SQL (SUM, AVG, COUNT) просто считают значения — что тут сложного? Но есть скрытая ловушка: как они ведут себя с NULL?

Давайте посмотрим на таблицу:
таблица orders:
id amount
1 100
2 NULL
3 200


1️⃣Посмотрим, как функции ведут себя с null значениями:

Выполним вот такой запрос:
SELECT
SUM(amount), -- 100 + 200 = 300 (NULL пропущен)
COUNT(amount), -- 2 (NULL не считается)
AVG(amount) -- (100+200)/2 = 150 (делим только на не-NULL)
FROM orders


Результат всегда рассчитывается только по НЕ-null значениям!
Имейте это ввиду.

2️⃣Что если в логике таблицы null означает на самом деле 0 и если мы этого не учтем то мы занизим метрику.
Что делать? Нужно использовать функцию coalesce:


Выполним вот такой запрос:
SELECT
SUM(COALESCE(amount, 0)), -- 100 + 0 + 200 = 300
COUNT(COALESCE(amount, 0)), -- 3 (учтёт все строки, NULL стал 0)
AVG(COALESCE(amount, 0)) -- (100 + 0 + 200) / 3 = 100
FROM orders


Отлично мы не занизили метрику.

3️⃣ А что насчёт  COUNT(*)?

COUNT(*) — считает все строки, независимо от значения поля. Т.е. учитывает и NULL, и не-NULL.

Выполним вот такой запрос:
SELECT
COUNT(*), -- 3 (все строки)
COUNT(amount), -- 2 (только не-NULL)
COUNT(COALESCE(amount, 0)) -- 3 (NULL стал 0)
FROM orders


Итог:
• COUNT(*) — нужен, когда важно узнать общее число строк (например, всю активность, включая пропуски).
• COUNT(поле) — только по реально заполненным значениям (NULL не попадает).
• COALESCE(поле, 0) — необходим, если логика отчёта требует трактовать NULL как 0 (например, “нет продаж” = 0), иначе метрики — сумма, среднее — будут ошибочными.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

❓ Знали о этих нюансах? Помню когда я учил SQL не многие проговаривали этот момент.

@dima_sqlit
  • 🔥 39
  • 🐳 13
  • ❤‍🔥 12
More from @dima_sqlit
  1. Sep 22, 2026Что сейчас стоит изучать Аналитику — чтобы перейти в DS/ML ? Замечаю общий тренд на изучен…
  2. Sep 21, 2026🧠 Уровень абстракции — навык, который сэкономит вам годы учёбы: Когда я начинал изучать P…
  3. Sep 18, 2026🏦 Задача с собеса в Т-банк на SQL: вторая зарплата в отделе Условие: есть таблица сотрудн…
  4. Sep 16, 2026🏠 IT ипотека (Часть 3) — Как я сэкономил на ремонте: кэшбэк, промокоды и один неочевидный…
  5. Sep 7, 2026🍂 Осень — сезон найма: Каждый год одна и та же история — в сентябре рынок будто просыпает…
  6. Aug 24, 2026P-value простыми словами: Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли тепе…
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 →