Меню

Что такое NULL в SQL и почему отсутствие значения — не ноль

Человек ничего не потратил или просто не ответил на вопрос? На примере короткого опроса объясняем NULL и показываем, почему пропуски меняют смысл отчёта.

Сетка с заполненными ячейками, оранжевым кольцом и пустым местом — иллюстрация различий между значением, нулём и NULL.

Один пустой ответ — несколько возможных историй

Представьте короткий опрос: «Сколько вы потратили на книги в этом месяце?» Анна ответила: 0 рублей. Борис — 2 000 рублей. Вера оставила поле пустым. Все трое участвовали в опросе, но сведения о расходах есть только у двоих.

Если записать Вере ноль, мы незаметно добавим факт, которого она не сообщала. Возможно, она ничего не покупала. Возможно, не помнит сумму или не хочет отвечать. Из одного пропуска выбрать версию нельзя. В работе с данными эта разница имеет большое значение.

Как обозначают отсутствие значения

В SQL используют NULL — специальное обозначение отсутствующего значения. SQL — язык для работы с данными в базе. Здесь нам достаточно понять смысл: ноль сообщает известное количество, а NULL не сообщает значение поля.

В PostgreSQL обычное сравнение с NULL даёт неопределённый результат, а для проверки отсутствия значения предусмотрены отдельные средства. Такое поведение описано в официальной документации. Это помогает не приравнивать неизвестное к достоверному ответу.

Само обозначение не объясняет причину пропуска. Если причина важна, её нужно хранить отдельно: например, отличать «не ответил» от «вопрос не относится к участнику».

Почему среднее получается неожиданным

Вернёмся к условному опросу. У Анны и Бориса вместе 2 000 рублей расходов. Среди двух известных ответов среднее равно 1 000 рублей. Это можно честно подписать: «Средние расходы среди ответивших на вопрос».

Если вместо пропуска Веры поставить ноль, среднее по трём участникам будет примерно 667 рублей. Число заметно меньше, хотя новых сведений о покупках не появилось. Изменилось наше предположение.

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

Куда пропадают участники при отборе

Допустим, редактор хочет разделить участников на тех, кто покупал книги, и тех, кто не покупал. Борис попадёт в первую группу, Анна — во вторую. Веру пока нельзя уверенно отнести ни к одной.

Если показать только две группы, читатель может решить, что опрос прошли два человека. Но участников было трое. Поэтому в отчёте полезна отдельная строка «нет ответа» и явное число участников, по которым известна сумма.

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

Когда можно использовать ноль

Ноль уместен, когда он соответствует известному факту или явно согласованному правилу. Анна указала нулевые расходы — в нашем примере это полноценный ответ. С Верой такой уверенности нет.

Иногда для расчёта принимают допущение. Тогда его нужно назвать и показать, как оно влияет на результат. Фраза «все пропуски приняли за нулевые расходы» сообщает больше, чем график с точным числом и скрытой методикой.

Не стоит исправлять пропуски только ради того, чтобы таблица выглядела заполненной. Сначала полезно выяснить, можно ли получить недостающие сведения, нужно ли выделить отдельную группу или вообще отказаться от вывода, для которого данных мало.

Как читать такой отчёт внимательнее

Перед выводами задайте автору несколько простых вопросов. Они пригодятся и без знания SQL:

  • Сколько всего записей и сколько заполненных ответов?
  • Что означает пустое поле именно в этой таблице?
  • По кому рассчитано среднее?
  • Заменяли ли пропуски какими-либо значениями?
  • Видна ли группа, о которой информации пока нет?

В нашем опросе достаточно написать: «Три участника, два ответа о расходах, среднее среди ответивших — 1 000 рублей». Такая формулировка не скрывает Веру и не придумывает за неё сумму. Умение замечать подобные детали помогает понимать отчёты и обсуждать их с аналитиками.

Куда двигаться дальше

Если хочется самостоятельно проверять данные, а не только читать готовые графики, посмотрите программу курса «SQL инженер». Понимание пропусков и смысла показателей — хорошая отправная точка для знакомства с языком.

SQL инженер
Курс
Доступ сразу
SQL инженер

SQL инженер — это специалист, который работает с базами данных, разрабатывает запросы, оптимизирует хранение данных и обеспечивает эффективную работу с информацией в компаниях.

С нуля до junior
Теория и практика
Диплом по окончании
500
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

ETL и ELT простыми словами: как данные превращаются в отчёты
3

ETL и ELT простыми словами: как данные превращаются в отчёты

От списка покупок до отчёта о продажах: разбираем два маршрута данных, их различия и вопросы, которые помогают выбрать подход. Без кода и сложных схем.
Что такое CSV и почему таблица иногда открывается неправильно
5

Что такое CSV и почему таблица иногда открывается неправильно

Почему выгрузка превращается в один столбец, откуда берутся странные символы и куда исчезают нули? Знакомимся с CSV на примере обычного списка заказов.
Оконные функции SQL: как сравнивать данные и видеть общую картину
8

Оконные функции SQL: как сравнивать данные и видеть общую картину

Как сравнить покупку со средним чеком, увидеть рост продаж и составить рейтинг? Объясняем оконные функции SQL на понятных примерах, без программирования.
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.