본문 바로가기
SQL 공부

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

by 나노다 2024. 10. 24.

문제 7-1

각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요. 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다.

문제 7-2 기대결과

 

[풀이]

 부서별 월급액이 최대인 직원 조회! 직원명과 부서와 월급액 컬럼 필요!

 부서별 최대 월급액 서브쿼리 만들고 직원 테이블에 조인한 담에 이름 부서 월급 조회하면 될 듯?

 

[첫 시도]

select Name
	, Department 
	, Salary 
from 
	(
	select Department as depart
		, max(Salary) as sMax
	from employees e 
	group by 1
	) SubQ
    /* department 둘 중 하나를 alias해주지 않으면 밑에 join할 때 오류 발생하더라! */
left join employees e on SubQ.depart = e.Department 
where case when Department = 'HR' then Salary =
	(select max(Salary) from employees where Department = 'HR' group by Department)
when Department = 'IT' then Salary =
	(select max(Salary) from employees where Department = 'IT' group by Department)
when Department = 'Sales' then Salary =
	(select max(Salary) from employees where Department = 'Sales' group by Department)
end

 한 번 단련을 해서 그런가 비교적 쉽게 방법이 떠올랐다! 더 이쁘게 나올 순 없을까? 무튼 얻은 것 두 가지

  • 서브쿼리가 늘어나면서 컬럼명이 겹치는 경우가 생기면, Alias를 통해 구분지어주자! 지칭이 모호하다고 오류남
  • 제발 case문 끝에 end로 맺는 거 잊지 말아다오

 

[결과]

문제 7-1 결과

 

문제 7-2

직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요. 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.

문제 7-2 기대결과

 

[풀이]

 직원별 참여 프로젝트를 조회하는데 예산이 10,000이상인 것만! 총 직원이 6명인디 한 명이 없는 거 봐선 조건에 안 맞으면 조회하지 않는가 보다! 그럼 예산 10,000 이상 조건은 마지막에 걸면 되겄다

 세 컬럼이 각각 다른 세 테이블에 있으니 조인은 최소 두번 하겠구먼...

 

[첫 시도]

select Name
	, ProjectName
	, Budget
from 
    (
    select ep.EmployeeID 
        , p.ProjectID
        , p.ProjectName
        , p.Budget 
    from employeeprojects ep left join projects p on ep.ProjectID = p.ProjectID 
    ) SubQ
left join employees e on SubQ.EmployeeID = e.EmployeeID 
where budget >= 10000

 이러면 나머지는 다 되는데 Frank의 프로젝트가 두 개 나온다! 둘 중 예산이 12,000인 Gamma프로젝트만 남겨야 하는데... 조건을 둘로 걸 수 있겠다. 프로젝트명이 Gamma인 걸로 살리거나, 예산이 더 낮은 쪽으로 살리거나!

 

[두번째 시도]

 다시 보니까 기대 결과가 이상하다............ Frank가 둘 나오는 건 정상이고, 오히려 예산이 10,000인 Alpha 프로젝트를 담당한 Alice씨가 결과테이블에서 빠진 점과, 같이 Alpha프로젝트를 맡은 Bob씨의 프로젝트가 결과에선 Beta로 나오고있다....

 프로젝트 중 유일하게 예산이 10,000 이하인 것이 104번 Delta 프로젝트다. 그리고 그 프로젝트를 맡은 유일한 직원은 ID가 5인 Eve씨 뿐이니, 문제대로라면 결과에선 딱 Eve씨와 Delta프로젝트만 빠지고 출력되는 게 알맞을 텐데, 기대 결과는 왜 저렇게.....? 무튼 그렇다면 첫 시도에서 진행한 코드가 옳기 때문에 결과를 저대로 첨부하도록 하겠음...

 

[결과] 

문제 7-2 결과