Lv5. 예산이 가장 큰 프로젝트는?
- Employees 테이블
EmployeeID | Name | Department | Salary |
1 | Alice | HR | 5000 |
2 | Bob | IT | 7000 |
3 | Charlie | IT | 6000 |
4 | David | HR | 4500 |
5 | Eve | Sales | 5500 |
6 | Frank | IT | 7200 |
- Projects 테이블
ProjectID | ProjectName | Budget |
101 | Alpha | 10000 |
102 | Beta | 15000 |
103 | Gamma | 12000 |
104 | Delta | 8000 |
- EmployeeProjects 테이블
EmployeeID
|
ProjectID
|
1
|
101
|
2
|
101
|
3
|
102
|
4
|
103
|
5
|
104
|
6
|
102
|
6
|
103
|
Q-1)
- 각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요.
- 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다.
A) 결과에 필요한 이름, 부서, 월급 컬럼은 모두 Employees 테이블에 포함되니 한 테이블에서 쿼리를 만들면 되겠다.
select Name,
Department,
Salary
from
(
select Name,
Department,
Salary,
rank() over (partition by Department order by Salary desc) rn
from employees
) a
where rn=1
같은 쿼리에선 실행 순서 상, where 절에서 rank over 함수를 인식하지 못하기에 서브 쿼리로 구성하고 나서 where 절에 rank over 조건을 입력하면 완성
Q-2)
- 직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요.
- 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.
A) 각 프로젝트에 어떤 직원이 참여했는지 한 번에 보기 위해 Projects / EmployeeProjects 테이블 조인
그 중에 예산이 10,000 이상인 프로젝트만 출력
select ep.EmployeeID,
p.ProjectName,
p.Budget
from projects p left join employeeprojects ep on p.ProjectID=ep.ProjectID
where Budget>=10000
마지막으로 서브 쿼리 구성해 Employees 테이블과 조인하고 필요한 컬럼만 출력하면 완성
select Name,
ProjectName,
Budget
from
(
select ep.EmployeeID,
p.ProjectName,
p.Budget
from projects p left join employeeprojects ep on p.ProjectID=ep.ProjectID
where Budget>=10000
) a left join employees e on a.EmployeeID=e.EmployeeID
길었던 SQL 퀘스트 빠이