最近在 query 时需要对一个 table 做一个 SELECT COUNT(), 只计算达到要求的 row,比方说:
计算 TABLE [EMPLOYEE] 中的 'NAME' field,只有 NAME LIKE 'MICHAEL%' 才被统计。
我最初想到的 SQL code 是这样的:
可问题是以上的 code 返回 EMPLOYEE table 所有的 rows 的数量,而我要的只是 NAME 以 MICHAEL 为开头的总数量,所以以上的 code 有一些问题,可能某处要改一改。
经过一番 google 后,在某处论坛看到了解决方法,和我的大致相同,只是去掉了 ' ELSE 0' 这一部分,正确写法为:
解决方法找到了,可疑惑还在,为什么第二个方法就行呢?看来我还要在想一想。
13/3/2008:
查过 SQL Book online 后,发觉第一个 code 行不通可能是因为当条件不符合时, ' ELSE 0' 那段有返回 0 值的 row,所以也被计算进去。而用第二个 code 的话,由于当条件不符合时,没有任何 row 产生,自然而然就不被 COUNT() 计算在内。
以上观点依然在猜测阶段,如有不同观点请不吝指教。
计算 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
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
FROM EMPLOYEE
解决方法找到了,可疑惑还在,为什么第二个方法就行呢?看来我还要在想一想。
13/3/2008:
查过 SQL Book online 后,发觉第一个 code 行不通可能是因为当条件不符合时, ' ELSE 0' 那段有返回 0 值的 row,所以也被计算进去。而用第二个 code 的话,由于当条件不符合时,没有任何 row 产生,自然而然就不被 COUNT() 计算在内。
以上观点依然在猜测阶段,如有不同观点请不吝指教。