繁体   English   中英

使用COUNT(CASE WHEN…)vs CASE WHEN =…THEN COUNT。 我得到不同的结果,有人可以解释为什么吗?

[英]using COUNT (CASE WHEN…) vs CASE WHEN = …THEN COUNT . I get different results, can someone kindly explain why?

当我使用方法1:'COUNT(CASE WHEN ..)'方法时,它会产生我想要的输出,但是当我使用第二种方法'CASE WHEN .. COUNT'方法时,我得到的对角矩阵不是我在寻找什么。

我的步骤是:

i)创建一个虚拟表

INSERT INTO job (jobid,  jobname, [priority]) 
VALUES  ('something', '1', 1), 
        ('something', '2', 2),
        ('something', '3', 3), 
        ('something', '4', 4), 
        ('something', '5', 5), 
        ('something', '6', 1), 
        ('something', '7', 1), 
        ('something', '8', 3), 
        ('something', '9', 3), 
        ('something', '10', 2);

ii)方法1:COUNT(当...时)

    SELECT 

COUNT(CASE  WHEN  [Priority] = 1 THEN 1 ELSE NULL END ) as Priority1,
COUNT(CASE  WHEN  [Priority] = 2 THEN 1 ELSE NULL END )as Priority2,
COUNT(CASE  WHEN  [Priority] = 3 THEN 1 ELSE NULL END )as Priority3

FROM job

结果:

  Priority1 Priority2   Priority3
  3         2           3

iii)方法2:以.... COUNT为例

SELECT 

CASE  WHEN  [Priority] = 1 THEN COUNT(*)  END  as Priority1,
CASE  WHEN  [Priority] = 2 THEN COUNT(*)  END as Priority2,
CASE  WHEN  [Priority] = 3 THEN COUNT(*)  END as Priority3

FROM job

GROUP BY [Priority]

结果:

Priority1   Priority2   Priority3
3           NULL        NULL
NULL        2           NULL
NULL        NULL        3
NULL        NULL        NULL
NULL        NULL        NULL

方法1给我正确的结果,但是方法2的输出使我感到惊讶……我期望的结果与方法1相同!

方法1:聚合函数COUNT在表级别应用,忽略COUNT并消耗所有NULL值([Priority]不是1、2或3的情况)。 因此,最后只有1行。

方法2:聚合函数COUNT应用于表的每一行。 因此,结果包含的行数与表中唯一[Priority]值的数量相等。 结果包含一些NULL因为在这种情况下不满足条件,并且COUNT返回NULL

您在第二种方法中有一个group by ,因此您将在Priority每个值获得一行。

所以你有点想要:

SELECT CASE  WHEN  [Priority] = 1 THEN COUNT(*)  END  as Priority1,
       CASE  WHEN  [Priority] = 2 THEN COUNT(*)  END as Priority2,
       CASE  WHEN  [Priority] = 3 THEN COUNT(*)  END as Priority3
FROM job;

但这是行不通的。 因为[Priority]未汇总。

嗯,您基本上回到了第一个方法,该条件位于聚合函数的参数中。您的期望是错误的。 使用第一种方法(尽管我个人更喜欢使用SUM()而不是COUNT() )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM