문제
- LeetCode SQL 문제
1907. Count Salary Categories / Medium
- 문제 내용 : [링크]
내가 작성한 Query
(select 'Low Salary' as category , sum(case when income <20000 then 1 else 0 end) as accounts_count from accounts group by category) union all (select 'Average Salary' as category , sum(case when income >= 20000 and income <= 50000 then 1 else 0 end) as accounts_count from accounts group by category) union all (select 'High Salary' as category , sum(case when income >50000 then 1 else 0 end) as accounts_count from accounts group by category)
문제의 핵심은, CASE WHEN THEN
구문을 통해 만든 카테고리별 총 COUNT(*)
를 구했을 때, 해당 카테고리에 없는 데이터도 카테고리 이름과 함께 0
값을 출력하는 것이 핵심이다. (위 문제에서 Average Salary
가 해당 케이스)
처음에는 income
을 구분하는 조건별로 category
를 만들고, GROUP BY
를 통해 COUNT(*)
함수를 사용하여 출력하려 했으나, Average Salary
범위에 해당하는 데이터(salary
)가 없어서 category
에 Average Salary
컬럼이 없음.
그래서 각 카테고리별 집계를 구하고 UNION ALL
하여 전체 카테고리별 집계 데이터를 구하기로 함
UNION ALL
을 통해 정답을 구할 수는 있었으나, 카테고리가 3개여서 가능했음. 5개, 10개 이상의 카테고리가 있는 경우, 위와 같이 UNION ALL
방식은 사용하기 힘듬
추후 리팩토링 해볼 문제