본문 바로가기
SQL 공부

사전캠프 달리기반 퀘스트 05

by 나노다 2024. 10. 22.

문제 5-1

각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.

문제 5-1 기대결과

 

[풀이]

 일단 이름 순으로 정렬이 돼있음. 의도적으로 이름 첫 철자가 abcdefgh여. 그리고 Top_ 두 컬럼을 조회하려면 부서별 최대 연봉과 그 직원을 조회하는 서브쿼리가 필요할 듯?

 

[첫 시도]

/* 성공 코드 */
select Name 
	, Department 
	, Salary 
	, case when Department = 'HR' then (select name from employees e where department = 'HR' order by salary desc limit 1)
	when Department = 'IT' then (select name from employees e where department = 'IT' order by salary desc limit 1)
	when Department = 'Finance' then (select name from employees e where department = 'Finance' order by salary desc limit 1) end 'Top_Earner'
	, case when Department = 'HR' then (select salary from employees e where department = 'HR' order by salary desc limit 1)
	when Department = 'IT' then (select salary from employees e where department = 'IT' order by salary desc limit 1)
	when Department = 'Finance' then (select salary from employees e where department = 'Finance' order by salary desc limit 1) end 'Top_Salary'
from employees e 
order by 1

 의외로 case문으로 한번에 해결하긴 했는데, 어우 지저분하다. 좀 가볍게 만들어줄 순 없을까나

 

문제 5-2

부서별로 평균 월급이 가장 높은 부서의 이름과 해당 부서의 평균 월급을 조회하는 SQL 쿼리를 작성해주세요.

문제 5-2 기대결과

 

[첫 시도]

select Department 
	, avg(Salary) 'Avg_Salary'
from employees e
group by 1
order by 2 desc
limit 1

 이렇게 간단히 풀어버렸습니다~ 그런데 IT부서랑 Finance부서의 평균 Salary가 같은디? 그래서 내 결과로는 IT가 아니라 Finance가 나온다... 머쓱...