오랑우탄의 반란
LeetCode 리트코드 | 1907. Count Salary Categories (MySQL) Union 본문
반응형
오늘도 오랑이는 문제를 풉니다.
1907. Count Salary Categories
풀이 과정
첫 시도는 아래와 같이 각 가격에 대한 case를 나눠서 풀었습니다.
하지만 이렇게 풀 경우, 보이는 바와 같이 'Average Salary' 에 대한 칼럼이 나오지 않습니다.
select case when income < 20000 then 'Low Salary'
when income > 50000 then 'High Salary'
else 'Average Salary' end as category,
count(account_id) as accounts_count
from accounts
group by category
ifnull 로 count를 감싸는 것으로 해결되는 문제인가 싶었지만 생각을 해보니 오랑이가 작성한 case 문은 True/False 를 반환하는 것이었고, Average Salary 에 대한 income 값이 없기 때문에 False가 나와 category 로 등록 자체가 되지 않는다는 것이 문제였습니다.
즉, 고정된 category 값에 대해 income 조건이 맞는 경우 값을 세어주는 구조가 필요한 것이지요.
sum(income<20000) 인 이유는 해당 값이 True/False 를 변환할텐데, 이를 더해줘서 False 일 때도 0을 반환해 category 가 뜨도록 해주기 때문입니다.
select 'Low Salary' as category, sum(income<20000) as accounts_count
from accounts
이처럼 임의로 각 category에 대한 조회 테이블을 만들어서 union 으로 연결해줘야 합니다.
최종 코드
select 'Low Salary' as category, sum(income<20000) as accounts_count
from accounts
union
select 'Average Salary' as category, sum(income between 20000 and 50000) as accounts_count
from accounts
union
select 'High Salary' as category, sum(income>50000) as accounts_count
from accounts ;
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
https://leetcode.com/problems/count-salary-categories/description/
반응형