Вступить в клуб →
средняявопросSQL и проверка интеграций по API

Сумма двух выборок не сходится с общим количеством строк

Вы считаете тикеты в отчёте и получаете странную арифметику:

SELECT count(*) FROM tickets;                             -- 1500
SELECT count(*) FROM tickets WHERE assignee = 'ivanov';   -- 300
SELECT count(*) FROM tickets WHERE assignee <> 'ivanov';  -- 900

Вместе получается 1200, а не 1500. Куда делись триста тикетов?

  • Оператор <> не работает со строковыми типами: для текстовых полей нужен NOT LIKE с полным шаблоном
  • Эти триста тикетов удалены, но продолжают учитываться в общем счётчике до пересборки статистики таблицы
  • Это тикеты с NULL в поле assignee: сравнение с NULL не даёт истину, поэтому они не попали ни в одну выборку
  • Функция count(*) на больших таблицах возвращает приблизительное значение, отсюда и расхождение в триста строк

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела