gpt4 book ai didi

sql - 解释不带组使用时的 COUNT 返回值

转载 作者:行者123 更新时间:2023-12-03 16:02:48 26 4
gpt4 key购买 nike

COUNT返回在组中找到的项目数,默认情况下它包括 NULL 值和重复项。

前两条语句返回错误,后两条语句返回错误 - NULL :

1/0
1/'A'
1/NULL
NULL/1

但包裹在 COUNT他们返回 10 :
SELECT COUNT(1/0);    -- 1
SELECT COUNT(1/'A'); -- 1
SELECT COUNT(1/NULL); -- 0
SELECT COUNT(NULL/1); -- 0
NULL案例可以由文档解释为

COUNT(ALL expression) evaluates expression for each row in a group, and returns the number of nonnull values.



因此,评估后,它们返回 NULL s 和 as 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 row affected) Msg 8134, Level 16, State 1, Line 16 Divide by zero error encountered.

Completion time: 2020-03-22T13:47:44.5512536+02:00



也许这个 1 row affected返回为 COUNT ?

最佳答案

当在 COUNT 中指定常量时表达式,SQL Server 可以在编译时优化查询,避免在执行时计算表达式。结果值永远不会是 NULL在前 2 个查询中,将始终为 NULL在最后 2 个查询中。

以下是来自 SELECT COUNT(1/0) 的片段和 SELECT COUNT(1/NULL)执行计划:

<ScalarOperator ScalarString="Count(*)">
<Const ConstValue="NULL" />

客户端工具 (SSMS) 生成的“1 行受影响”消息,反射(reflect)了 INSERT 返回的行数陈述。如果不需要,添加 SET NOCOUNT ON;到脚本的开头。

关于sql - 解释不带组使用时的 COUNT 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60798939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com