728x90
📚문제
📝풀이
# Write your MySQL query statement below
SELECT LEFT(trans_date,7) AS month
, country
, COUNT(trans_date) AS trans_count
, COUNT(CASE WHEN state = 'approved' THEN 1 END) AS approved_count
#, SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END) AS approved_count
, SUM(amount) AS trans_total_amount
, SUM(CASE WHEN state = 'approved' THEN amount END) AS approved_total_amount
FROM Transactions
GROUP BY LEFT(trans_date,7), country
Medium 난이도에 비해 쉬운 문제였다
다만 한가지 주의할 점이 있다❗❗
5번째 코드에서 approved_count를 계산할 때
THEN 1 ELSE 0 이렇게 조건을 부여해줬다
그래서 머릿속에선 당연히 행 2개중에서
approved인 경우는 1개니까 값이 1이 나올거라고 생각했는데
2가 나왔다 (SUM으로 바꿔주면 1이 잘 나옴)
곰곰이 생각해보니까 그 이유는
approved가 아닌경우에는 NULL이 아닌 0이 들어가고
COUNT 함수에서 1인행, 0인행 처럼 NULL이 아닌 행의 개수를 카운트해서 2가 나오는 것이었다
그래서
COUNT 함수를 써서 ELSE 0 조건 대신 아무것도 작성하지 않은 다음( ELSE 작성하지 않으면 NULL 값)
NULL 값이 아닌 행 (state='approved'인 행)의 개수를 세거나
COUNT(CASE WHEN state = 'approved' THEN 1 END) AS approved_count
SUM 함수를 써서
state = 'approved' 인 경우는 1 , 아닌 경우는 0으로 계산하여 더하면
state = 'approved' 인 행의 개수만큼의 합이 나온다
SUM(CASE WHEN state = 'approved' THEN 1 ELSE 0 END) AS approved_count
728x90