월별 합계 case 문 질문입니다 0 5 1,682

by 55 [SQL Query] [2019.11.02 09:28:24]


SELECT NAME

, COUNT(*) AS TOT ,

COUNT(CASE WHEN MONTH(date) = 1 THEN 1 ELSE NULL END) AS [01] ,

COUNT(CASE WHEN MONTH(date) = 2 THEN 1 ELSE NULL END) AS [02] ,

COUNT(CASE WHEN MONTH(date) = 3 THEN 1 ELSE NULL END) AS [03] ,

COUNT(CASE WHEN MONTH(date) = 4 THEN 1 ELSE NULL END) AS [04] ,

COUNT(CASE WHEN MONTH(date) = 5 THEN 1 ELSE NULL END) AS [05] ,

COUNT(CASE WHEN MONTH(date) = 6 THEN 1 ELSE NULL END) AS [06] ,

COUNT(CASE WHEN MONTH(date) = 7 THEN 1 ELSE NULL END) AS [07] ,

COUNT(CASE WHEN MONTH(date) = 8 THEN 1 ELSE NULL END) AS [08] ,

COUNT(CASE WHEN MONTH(date) = 9 THEN 1 ELSE NULL END) AS [09] ,

COUNT(CASE WHEN MONTH(date) = 10 THEN 1 ELSE NULL END) AS [10] ,

COUNT(CASE WHEN MONTH(date) = 11 THEN 1 ELSE NULL END) AS [11] ,

COUNT(CASE WHEN MONTH(date) = 12 THEN 1 ELSE NULL END) AS [12]

FROM Test A LEFT JOIN TTest B ON a.Name_CC = B.NAME_CC

GROUP BY NAME;

 

월별로 합계 쿼리를 짰는데요

인터넷을 보고 짠거라... case 문에서 then 1 에 의미가 궁금해서요

보통 then 에서는 true 일때 저 값이 나오는건데 1 로 했는데 월별로 합계 값이 나오더라고

의미 좀 알려주세요~

by 모래가흙흙 [2019.11.02 19:01:28]

Count함수에는 Null이 아닌값만 수량을 세므로, 꼭 1이 아니더라도 괜찮아요


by 55 [2019.11.03 00:14:47]

그럼 수량 1개를 의미하는건가요??


by 모래가흙흙 [2019.11.03 13:01:39]

Count함수와 Group by를 제거 하셔서 Count하기 전에 데이터구조를 확인해보시면,

Case문에 의해서 월별로 1 혹은 Null값만 있을겁니다.

1대신 'A'를 넣으셔서 확인해보셔도 됩니다.  Null이 아닌값만 수량을 센다고 보시면 됩니다.


by 농부지기 [2019.11.04 09:24:11]
SELECT COUNT(1) FROM DUAL;
SELECT COUNT(1.1111) FROM DUAL;
SELECT COUNT('A') FROM DUAL; 
SELECT COUNT('rrrrrr') FROM DUAL;
SELECT COUNT(dummy) FROM DUAL;

위 5가지는 모두 같은 결과(=1)가 나오네요.
count()안에 값을 상수로 하건, 컬럼명으로 하건 동일 합니다.

count()는 건수를 세는 함수죠.
1이라는 숫자를 세건, 컬럼명을 세건 동일한 값이라는 거죠.

그래서, 보통 sql을 작성할때 컬럼명보단, 숫자를 많이 사용들 합니다.
왜냐면 시각적으로 식별하기 쉬워서죠.

 


by 55 [2019.11.04 11:28:36]

감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입