[Leetcode] Count Salary Categories
정답
WITH Ranges AS (
SELECT 0 AS LowerLimit, 19999 AS UpperLimit, 'Low Salary' AS category UNION ALL
SELECT 20000, 50000, 'Average Salary' UNION ALL
SELECT 50001, 999999999, 'High Salary'
)
SELECT R.category, COUNT(A.account_id) accounts_count
FROM Accounts A
RIGHT JOIN Ranges R
ON A.income BETWEEN R.LowerLimit AND R.UpperLimit
GROUP BY R.category
✅ Point
- 특정 범위를 만족하는 row의 개수 구하기
- 특정 범위를 만족하는 row가 없다면 0으로 처리
CASE WHEN + COUNT
와 함께 sub query로 사용한다면 > 조건에 맞는 row 가 없으면 column도 사라지는 문제 발생
- 특정 범위를 만족하는 row가 없다면 0으로 처리
- 따라서 원하는 범위를 별도로 명시적으로 만들어 놓고, JOIN해야 count값이 0인 경우에도 column을 살릴 수 있음
- with 와 select를 여러 번 union all 하여 범위 설정
- 해당 범위를 만족하는지를 기준으로 JOIN
- 범위가 사라지지 않게 RIGHT JOIN