월급에 따라 월급이 높은 사람, 중간, 적은 사람의 수를 분류하는 문제
select
case
when income<20000 then 'Low Salary'
when income between 20000 and 50000 then 'Average Salary'
else 'High Salary'
end category,
count(1) accounts_count
from accounts
group by 1
처음엔 case를 사용하여 case값에 따른 그룹화를 하고 그에 대한 count를 구했다. 하지만 이 방법은 count가 0일 경우 category 값이 분류의 결과로 나오지 않기 때문에 다른 방법을 생각해야 했다.
한 개의 row를 만드는 방법을 알게 되고, 이를 union을 통한 결합으로 해당 문제를 해결했다.
select 'Low Salary' category, count(1) accounts_count
from accounts
where income<20000
union
select 'Average Salary' category, count(1) accounts_count
from accounts
where income between 20000 and 50000
union
select 'High Salary' category, count(1) accounts_count
from accounts
where income>50000
LeetCode는 union 관련 문제가 의외로 많이 나온다.