2012-06-14 3 views
1

나는 내가 쓴 테이블SQL 선택 COUNT 문제

num 
---- 
NULL 
NULL 
NULL 
NULL 
55 
NULL 
NULL 
NULL 
99 

에게이

select COUNT(*) 
from tbl 
where num is null 

출력 7

했지만, 난이

select COUNT(num) 
from tbl 
where num is null 

쓸 때 출력했다 0

이 두 쿼리의 차이점은 무엇입니까 ??

+0

이 질문의 중복 가능성 http://stackoverflow.com/questions/3003457/count-vs-countcolumn-name-the-of-correct – praveen

+0

[SQL에서 count (column)과 count (*)의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/) 59294/in-sql-whats-the-difference-between-countcolumn-and-count) –

답변

3

당신이 선택한 분야에 차이가 있습니다.

COUNT(*)을 계산할 때 NULL 값이 고려됩니다 (반환 된 모든 행 수).

카운트시 COUNT(num) NULL 값은 고려되지 않습니다 (null이 아닌 모든 필드를 계산하십시오). DBMS에이

Source

을 사용 어떤 SQL 표준 행동이다

. COUNT 볼 (DISTINCT EXPR는 [EXPR ...]) 위의 출력, 쿼리 카운트 (NUM)의 결과를 고려

0

count(*) 행 수를 반환합니다. numnull이 아닌 행 수를 반환합니다. 마지막 결과를 select count(*) from test where num is null으로 변경하여 원하는 결과를 얻으십시오.

0

Count(*) 카운트 행수, COUNT(num) 카운트 열 NUM에 하지 널 값의 수.

+0

그러나 num 열에는 두 개의'NOT-NULL' 값이 있으므로 출력이 0 일 때 2이어야합니까 ?? – yogi

+2

당신이이 절을 추가하지 않았다면 그럴 것입니다 : num이 null 인 경우 :-) –

+0

지금 당장 제가 가지고 있어요 :) – yogi

-1

먼저 값을 제거 세어 2

+0

그래, 그게 나 한테 도청당한거야. 그러나 왜 출력이 0입니까? – yogi

+2

쿼리에 "where num is null"이있는 행만 선택하는 where 절이없는 경우 true가됩니다. –

0

초 경우이어야 그러면 where 절이 나타납니다. 첫 번째 경우에는 * null을 사용하는 행이 제거되지 않습니다.

것은 당신이 널 (null)이 포함 된 콜에 계산하고 사용보다 널 (null)와 행 수에 포함되도록하려면

Count(ISNULL(col,0)) 
+0

ISNULL()은 비표준 SQL이므로에 따라 작동하지 않을 수도 있습니다 OP가 사용하는 RDBMS –