Как посчитать количество sql?
В PostgreSQL считаю записи и получаю разные числа с COUNT(*) и COUNT(email). В нескольких строках email неизвестен. Какой вариант показывает общее количество строк?
Дом, ремонт, стройка
Животные и питомцы
Учёба и образование
Фотография
Психология
Пока нет лидеров с лучшими ответами.
Ваш вопрос
В PostgreSQL считаю записи и получаю разные числа с COUNT(*) и COUNT(email). В нескольких строках email неизвестен. Какой вариант показывает общее количество строк?
Общее количество строк считает COUNT(*). Выражение COUNT(email) пропускает строки, где email равно NULL. В PostgreSQL пустая строка не является NULL, поэтому она попадет в счетчик второго варианта.
Например, при пяти строках и двух неизвестных email результат COUNT(*) равен 5, а COUNT(email) равен 3. Проверить оба числа можно одним запросом: SELECT COUNT(*), COUNT(email) FROM training.people;.
Оба варианта работают с тем набором строк, который сформирован запросом. Фильтр меняет этот набор, а соединение может увеличить его из-за нескольких совпадений. Поэтому прежде чем сравнивать число с количеством пользователей, убедитесь, что каждая строка действительно соответствует одному пользователю. Сам COUNT(*) не устраняет повторные появления.
COUNT(*).NULL, используйте COUNT(email).WHERE и возможное размножение строк после соединений.В PostgreSQL пустой email в виде '' будет учтен вторым вариантом. Поэтому счетчик заполненных выражений не всегда равен числу пригодных для связи адресов.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
4o-mini
4o-mini
Как посчитать количество sql?
Все строки
COUNT(*)считает строки входного набора независимо от того, какие отдельные столбцы содержатNULL. Если требуется количество всех записей учебной таблицы, используйтеSELECT COUNT(*) FROM training.people;с ее реальным именем.Заполненное выражение
COUNT(email)считает только строки, где выражениеemailне равноNULL. Это не обязательно количество реальных адресов: пустая строка в PostgreSQL является значением и будет учтена. Если у вас пять строк и в двухemailравенNULL, результаты будут 5 и 3.Влияние отбора Если добавить
WHERE, сначала определяется набор подходящих строк, затем считается его размер. Поэтому количество активных пользователей и количество всех пользователей требуют разных условий. Значения, отфильтрованные условием, уже не участвуют в подсчете.Результат без строк Обычный агрегатный запрос без группировки вернет одну строку со значением 0, если вход пуст. Это отличается от группированного запроса, в котором может не оказаться ни одной группы. Не путайте отсутствие строки результата со строкой, содержащей ноль.
Что считать единицей После соединения таблиц один пользователь может появляться в нескольких строках.
COUNT(*)тогда считает строки соединенного набора, а не автоматически уникальных людей. Перед подсчетом определите, что является одной единицей: строка, пользователь, заказ или заполненный адрес.Проверка Создайте небольшой понятный учебный набор и выпишите ожидаемые числа вручную. Включите обычный адрес,
NULLи пустую строку. Такой пример показывает различие точнее, чем попытка судить по большой таблице без известного состава.