오랑우탄의 반란

LeetCode 리트코드 | 1907. Count Salary Categories (MySQL) Union 본문

SQL/LeetCode

LeetCode 리트코드 | 1907. Count Salary Categories (MySQL) Union

5&2 2024. 7. 23. 12:05
반응형

 

오늘도 오랑이는 문제를 풉니다.

 

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/

반응형