03/03 SQL 문제풀이 - 1907. Count Salary Categories (Leetcode)

Data Architect / Engineer·2024년 3월 3일
1

1일_1SQL

목록 보기
44/63
post-thumbnail

문제

  • 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)가 없어서 categoryAverage Salary 컬럼이 없음.

  • 그래서 각 카테고리별 집계를 구하고 UNION ALL 하여 전체 카테고리별 집계 데이터를 구하기로 함

  • UNION ALL을 통해 정답을 구할 수는 있었으나, 카테고리가 3개여서 가능했음. 5개, 10개 이상의 카테고리가 있는 경우, 위와 같이 UNION ALL 방식은 사용하기 힘듬

  • 추후 리팩토링 해볼 문제

profile
질문은 계속돼 아오에

0개의 댓글