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

[풀이]
부서별 월급액이 최대인 직원 조회! 직원명과 부서와 월급액 컬럼 필요!
부서별 최대 월급액 서브쿼리 만들고 직원 테이블에 조인한 담에 이름 부서 월급 조회하면 될 듯?
[첫 시도]
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-2
직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요. 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.

[풀이]
직원별 참여 프로젝트를 조회하는데 예산이 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프로젝트만 빠지고 출력되는 게 알맞을 텐데, 기대 결과는 왜 저렇게.....? 무튼 그렇다면 첫 시도에서 진행한 코드가 옳기 때문에 결과를 저대로 첨부하도록 하겠음...
[결과]

'SQL 공부' 카테고리의 다른 글
사전캠프 달리기반 퀘스트 06 (1) | 2024.10.23 |
---|---|
사전캠프 달리기반 퀘스트 05 (3) | 2024.10.22 |
사전캠프 달리기반 퀘스트 03-04 (2) | 2024.10.20 |
사전캠프 달리기반 퀘스트 01-02 (0) | 2024.10.19 |
사전캠프 걷기반 퀘스트 11 (마지막 연습 문제) (1) | 2024.10.14 |