SQL: COUNT()와 SUM()의 작동 방식을 이해한다.
2024. 9. 22. 00:40ㆍ전처리/SQL
01 문제: COUNT()와 SUM() 작동 방식의 차이를 이해한다.
문제 URL: Confirmation Rate
▶ 작성 코드
SELECT SI.user_id
-- INFULL 없으면 NULL 떠서 추가 --
, IFNULL(ROUND(SUM(CO.action = 'confirmed') / COUNT(CO.action),2),0) AS confirmation_rate
FROM Signups AS SI
LEFT JOIN Confirmations AS CO ON SI.user_id = CO.user_id -- 매칭되지 않으면 NULL --
GROUP BY SI.user_id
▶ 참고 코드
SELECT s.user_id,
ROUND(
CASE -- NULL을 0으로 바꿈 --
WHEN COUNT(c.action) = 0 THEN 0
ELSE SUM(c.action = 'confirmed') / COUNT(c.action)
END,
2) AS confirmation_rate
FROM Signups s
LEFT JOIN Confirmations c ON s.user_id = c.user_id
GROUP BY s.user_id
▶ 조인 결과
1. SUM()은 조건이 참인 경우에만 1을 더하므로, 불리언 값(True 또는 False)에 따라 원하는 대로 'confirmed' 메시지만 정확하게 세어줄 수 있다.
2. COUNT()는 조건식이 있더라도 해당 행이 존재하는지 여부만 따지고, 조건이 참인지 여부는 고려하지 않는다.
- COUNT(CO.action = 'confirmed')처럼 작성하더라도 항상 1 또는 NULL로 평가되기 때문이다.
- COUNT(CO.action): CO.action의 총 개수를 센다. 다만 NULL 값이 있는 경우는 포함되지 않는다.
3. 따라서 COUNT()는 'confirmed' 상태의 메시지만 카운팅하는 것이 아니라, 해당 행이 있는 모든 경우를 1로 처리한다.
02 문제: 나머지를 구하는 조건 수식을 쓸 수 있다.
문제 URL: not-boring-movies
SELECT *
FROM Cinema
WHERE id % 2 = 1
AND description != 'boring'
ORDER BY rating DESC;
1. NOT 말고 NOT IN 까지 써야한다.
2. != 대신 NOT IN, NOT LIKE 도 쓸 수 있다.
3. 나머지는 MOD(ID, 2) = 1 도 쓸 수 있다.
'전처리 > SQL' 카테고리의 다른 글
SQL: 특정 컬럼에 필터링 된 조건이 필요할 때 (0) | 2024.10.14 |
---|---|
SQL: COALESCE 사용예시, NULLIF과 IFNULL의 차이점 (0) | 2024.09.30 |
SQL: DATEDIFF, SUBDATE 활용 방법의 차이 (feat. join문제) (1) | 2024.09.12 |
SQL: SELF JOIN 활용하는 문제 풀이 (output보며 이해) (0) | 2024.09.12 |
SQL: CROSS JOIN과 LEFT JOIN 동시에 활용하기 (0) | 2024.09.05 |