【发布时间】:2020-03-22 11:49:15
【问题描述】:
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 expression) 计算组中每一行的表达式, 并返回非空值的数量。
因此,它们被评估,它们返回 NULLs,而 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, Level 16, State 1, Line 16 除以零 遇到错误。
完成时间:2020-03-22T13:47:44.5512536+02:00
也许这个1 row affected 被返回为COUNT?
【问题讨论】:
-
1 rows affected消息适用于您的insert语句。select count(1/0)很好奇,不过,我预计那里会出现除以零的错误。 -
哦!我知道你在那里做了什么...
SET ARITHABORT OFF; select count(1/0);
标签: sql sql-server tsql group-by count