我的COUNT CASE WHEN陈述式中隐含ELSE 0吗?


10

COUNT(CASE WHEN [Column A] = ____ THEN 1 END 和之间有什么区别COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END

我一直在使用前者,到目前为止,我还没有看到有什么不同。添加ELSE 0- 的原因是什么-在某些情况下SQL Server会错误地计数?


4
第二个示例应使用SUM而不是COUNT才能正确。
Olivier Jacot-Descombes 2015年

Answers:


23

在第一种情况下,您只需简单地计算1s和NULL。(如果CASE语句中的所有条件均不匹配且没有ELSE子句,则返回NULL。)不计入NULL。在第二种情况下为1和0。可以计数为0。

快速示例:

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;

输出:

在此处输入图片说明


9

如果未指定case语句的else部分,则默认情况下它将返回NULL,这对您来说是一件好事,因为count将计算非NULL值。如果您从大小写返回任何其他内容,则无论它是1、0还是2,都将始终计为1。

如果要使用总和而不是计数,则应返回1或0。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.