我可以在COUNT本身中加入某种过滤机制,我不想在查询的WHERE或JOIN中使用它(因为它是大型查询的一部分,其中还有其他列,我不想得到受到哪里和加入条件的影响)。
例如,我可以在SUM
中使用案例SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END),
我是否也可以在COUNT中执行此类操作,以便我只计算特定行
类似的东西:
COUNT(CASE WHEN work_status IN ('V','L') THEN <should come in count> ELSE <exclude from count> END)
非常感谢。
答案 0 :(得分:17)
你可以使用
COUNT(CASE WHEN work_status IN ('V','L') THEN 1 END)
对于与指定条件不匹配的行,CASE
表达式返回NULL
而COUNT
仅计算NOT NULL
值
答案 1 :(得分:5)
这应该做你想要的:
SUM(CASE WHEN work_status IN ('V','L') THEN 1 ELSE 0 END)
虽然它使用的是SUM聚合函数,但它实际上是一个条件计数,因为对于每一行,你要在总和中加1或0.