COUNT возвращает количество элементов, найденных в группе, и по умолчанию оно содержит значения NULL и дубликаты.
Первые два оператора возвращают ошибку, а вторые два - NULL
:
1/0
1/'A'
1/NULL
NULL/1
Но в COUNT
они возвращают 1
и 0
:
SELECT COUNT(1/0); -- 1
SELECT COUNT(1/'A'); -- 1
SELECT COUNT(1/NULL); -- 0
SELECT COUNT(NULL/1); -- 0
Случаи NULL
могут быть объяснены документами как
COUNT (выражение ALL) вычисляет выражение для каждой строки в группе и возвращает число ненулевых значений.
Итак, они оцениваются, они возвращают NULL
с, а поскольку non null
значения являются только счетчиками, мы получаем 0
.
Мне интересно, почему первые два возвращаются 1
?
Имея значения в таблице, все кажется нормальным - выдается ошибка и значение не возвращается:
DECLARE @DataSource TABLE
(
[valueA] INT
,[valueB] INT
);
INSERT INTO @DataSource ([valueA],[valueB])
VALUES (1, 0);
SELECT COUNT([valueA]/[valueB])
FROM @DataSource;
(затронуто 1 строка) Msg 8134, уровень 16, состояние 1, строка 16 Обнаружена ошибка деления на ноль.
Время завершения: 2020-03-22T13: 47: 44.5512536 + 02: 00
Возможно, это 1 row affected
возвращается как COUNT