SELECT COUNT (with some conditions here) to return total rowcount for desired value only

最近在 query 时需要对一个 table 做一个 SELECT COUNT(), 只计算达到要求的 row,比方说:

计算 TABLE [EMPLOYEE] 中的 'NAME' field,只有 NAME LIKE 'MICHAEL%'  才被统计。


我最初想到的 SQL code 是这样的:

SELECT   COUNT ( CASE   WHEN  NAME  LIKE   ' MICHAEL% '   THEN   1   ELSE   0   END AS  REC_COUNT
FROM  EMPLOYEE


可问题是以上的 code 返回 EMPLOYEE table 所有的 rows 的数量,而我要的只是 NAME 以 MICHAEL 为开头的总数量,所以以上的 code 有一些问题,可能某处要改一改。

经过一番 google 后,在某处论坛看到了解决方法,和我的大致相同,只是去掉了 ' ELSE 0' 这一部分,正确写法为:

SELECT   COUNT ( CASE   WHEN  NAME  LIKE   ' MICHAEL% '   THEN   1   END AS  REC_COUNT
FROM  EMPLOYEE

解决方法找到了,可疑惑还在,为什么第二个方法就行呢?看来我还要在想一想。

13/3/2008:
查过 SQL Book online 后,发觉第一个 code 行不通可能是因为当条件不符合时, ' ELSE 0' 那段有返回 0 值的 row,所以也被计算进去。而用第二个 code 的话,由于当条件不符合时,没有任何 row 产生,自然而然就不被 COUNT() 计算在内。

以上观点依然在猜测阶段,如有不同观点请不吝指教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值