Функция SQL COUNT автоматически исключает значения NULL?

У меня есть база данных под названием люди, в которой всего 8398 записей. Я знаю это, потому что выполнил следующий запрос с функцией COUNT.

SELECT COUNT(*)
FROM people;

Однако, когда я выполняю COUNT в столбце даты рождения, я обнаруживаю, что это возвращает только 6152 записи. Это потому, что функция COUNT автоматически исключает значения NULL в столбце даты рождения?

SELECT COUNT(birthdate)
FROM people;

Как я могу подсчитать все столбцы, которые имеют NULL в столбце дня рождения?

COUNT(expr) подсчитывает количество строк, в которых expr оценивается как не NULL.
zerkms 12.04.2018 22:49
select count(birthdate) from people where birthdate is not null
WillardSolutions 12.04.2018 22:50

@WillardSolutions семантически то же самое. И, скорее всего, так же по производительности.

zerkms 12.04.2018 22:50

Может ли кто-нибудь дать ответ вместо комментариев?

user1554264 12.04.2018 22:51

@ user1554264, непонятно, о чем вы спрашиваете: ваш последний запрос делает именно то, что вы просили.

zerkms 12.04.2018 22:51

@ user1554264 Какой именно ваш вопрос не получил ответа в комментариях?

WillardSolutions 12.04.2018 22:52

@zerkms Я согрешил, исправил свой ответ - прошу прощения за недоразумение

user1554264 12.04.2018 22:52
select count(1) from people where birthdate is null
WillardSolutions 12.04.2018 22:53

Или SELECT COUNT(*) (что более идиоматично и для некоторых СУБД может быть более производительным)

zerkms 12.04.2018 22:54

Я решил использовать SELECT COUNT(*) FROM people WHERE birthdate is NULL; - похоже, добился желаемого результата с помощью простого синтаксиса.

user1554264 12.04.2018 23:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
10
1 485
1

Ответы 1

How could I perform a count of all the columns that are NULL in the birthday column?

Проверьте, является ли столбец нулевым, используя выражение CASE:

SELECT COUNT(CASE WHEN birthdate IS NULL THEN 1 END)
FROM people;

Выражение оценивается как 1, когда birthdate имеет значение NULL, и как NULL, когда brthdate не равно NULL. Поскольку COUNT считает только ненулевые значения, вы получите количество NULL в столбце birthdate.

Привет, я решил использовать SELECT COUNT(*) FROM people WHERE birthdate is NULL; , так как это, кажется, достигло результата, которого я хотел.

user1554264 12.04.2018 22:58

Другие вопросы по теме