Что такое 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
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

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

Обучить команду или нанять специалиста по данным: как выбрать
50

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

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
53

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
48

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

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