COUNT CASE WHEN 명세서에 ELSE 0이 내포되어 있습니까?


10

차이 무엇 COUNT(CASE WHEN [Column A] = ____ THEN 1 ENDCOUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

나는 전자를 사용하고 있으며 지금까지 그 차이를 보지 못했습니다. 추가 이유는 무엇 ELSE 0입니까? SQL Server가 잘못 계산되는 상황이 있습니까?


4
두 번째 예는 정확하기 위해 COUNT 대신 SUM을 사용해야합니다.
Olivier Jacot-Descombes

답변:


23

첫 번째 경우에는 1과 NULL을 계산하는 것으로 충분합니다. CASE 문의 조건이 일치하지 않고 ELSE 절이없는 경우 NULL이 반환됩니다. NULL은 계산되지 않습니다. 두 번째 경우 1과 0입니다. 0을 셀 수 있습니다.

빠른 예 :

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;

산출:

여기에 이미지 설명을 입력하십시오


9

else part to case 문을 지정하지 않으면 기본적으로 NULL을 반환하며, 경우에 따라 count가 NULL이 아닌 값을 계산하기 때문에 좋은 일입니다. case에서 다른 것을 반환하면 1, 0 또는 2인지 여부는 중요하지 않으며 항상 1로 계산됩니다.

count 대신 sum을 사용하려면 1 또는 0을 반환해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.