Значения SQL Count NULL равны 0, даже если есть значения NULL - PullRequest
1 голос
/ 15 марта 2019

В конкретном случае у меня есть таблица базы данных, заполненная 1070 элементами, и в какой-то момент процесса я добавляю столбец с именем Current_Status. В результате все элементы имеют новое поле, которое изначально NULL .

Эта таблица используется в качестве очереди, и для каждой обрабатываемой строки я обновляю поле «Current_Status» на «Обработано» или «Не обработано».

Чтобы увидеть, как идет процесс, я подсчитал оставшиеся элементы, которые все еще имели статус NULL , используя этот запрос:

SELECT COUNT([Current_Status]) FROM Table_Name WHERE [Current_Status] IS NULL

Проблема заключается в том, что после первых 1000 элементов результат для этого запроса был 0, даже если я проверил и с помощью запроса SELECT * FROM Table_Name показал, что там еще есть несколько строк со статусом NULL .

Есть идеи, что может быть причиной этого?

Я проверил эту ситуацию с помощью Azure Data Studio 1.4.5.

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Причина этого в том, что вы указали в столбце значение столбца, равное null.Вместо этого используйте count(*):

SELECT COUNT(*) FROM Table_Name WHERE [Current_Status] IS NULL

Пример данных:

current_status
--------------
Processed
Null
Not Processed
Null

И разница между двумя запросами:

count (current_status))

SELECT count(current_status) FROM table_name WHERE current_status IS NULL 

0

кол (*)

SELECT count(*) FROM table_name WHERE current_status IS NULL 

2
3 голосов
/ 15 марта 2019

С

SELECT COUNT([Current_Status]) FROM Table_Name WHERE [Current_Status] IS NULL

вы говорите: «возьмите все строки, где current_status равно нулю, и посчитайте, сколько из этих current_status не равно нулю».Что, конечно, ноль.COUNT(<expression>) подсчитывает ненулевые вхождения выражения.

Вместо этого нужно подсчитать строки:

SELECT COUNT(*) FROM table_name WHERE current_status IS NULL;

Или счетчик остается:

SELECT COUNT(*) - COUNT(current_status) FROM table_name;
...