문제 : 🦚 예산이 가장 큰 프로젝트는?
1. 각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요.
a. 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다.
b. 기대 결과
Name
|
Department
|
Salary
|
Alice
|
HR
|
5000
|
Frank
|
IT
|
7200
|
Eve
|
Sales
|
5500
|
2. 직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요.
a. 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.
b. 답지 오류로 일부 수정
Name | ProjectName | Budget |
Alice | Alpha | 10000 |
Bob | Alpha | 10000 |
Charlie | Beta | 15000 |
Frank | Beta | 15000 |
David | Gamma | 12000 |
Frank | Gamma | 12000 |
1. 알고리즘
1) 각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요.
- 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다.
- 1단계: Salary를 Department 별로 partition by 한 후, Salry를 Order by 하는 rank over 열을 만들어 준다.
- 2단계: rank 가 1인걸 뽑는다.
2. 직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요.
- 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.
- 1단계: Budget 예산이 10,000 이상인 걸 추출
- 2단계: ProjectID가 같은 EmployeeProjects 를 JOIN ON 해주기
- 3단계: EmployeeID가 같은 Employees 를 JOIN ON 해주기
2. SQL 쿼리
1번 문제
- 1단계: Salary를 Department 별로 partition by 한 후, Salry를 Order by 하는 rank over 열을 만들어 준다. DESC
select Name, Department, Salary, rank() over (partition by Department order by Salary desc) as rnk
from employees
- 2단계: rank 가 1인걸 뽑는다.
with Salaryrank as (
select Name, Department, Salary, rank() over (partition by Department order by Salary desc) as rnk
from employees )
select Name, Department, Salary
from Salaryrank
where rnk = 1
2번 문제
- 1단계: Budget 예산이 10,000 이상인 걸 추출
select ProjectID, ProjectName, Budget
from projects
where Budget >= 10000
- 2단계: ProjectID가 같은 EmployeeProjects 를 JOIN ON 해주기
with projectsBudget as (
select ProjectID, ProjectName, Budget
from projects
where Budget >= 10000)
select EmployeeID, ProjectName, Budget
from projectsBudget b
join EmployeeProjects ep on b.ProjectID = ep.ProjectID
- 3단계: EmployeeID가 같은 Employees 를 JOIN ON 해주기
with projectsBudget as (
select ProjectID, ProjectName, Budget
from projects
where Budget >= 10000), IDEmployee as (
select EmployeeID, ProjectName, Budget
from projectsBudget b
join EmployeeProjects ep on b.ProjectID = ep.ProjectID
)
select Name,ProjectName, Budget
from IDEmployee i
join employees e on i.EmployeeID = e.EmployeeID
order by ProjectName
'백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글
[SQL 달리기반 레벨 1] 🎨 데이터 속 김서방 찾기 (0) | 2025.02.01 |
---|---|
[SQL 달리기반 레벨 5] 🏆 가장 많이 팔린 품목은? (0) | 2025.02.01 |
[SQL 달리기반 레벨 4] 💸 가장 높은 월급을 받는 직원은? (0) | 2025.02.01 |
[SQL 달리기반 레벨 4] 🛒 단골 고객님 찾기 (0) | 2025.01.31 |
[SQL 달리기반 레벨 3] 💳 이용자의 포인트 조회하기 (0) | 2025.01.31 |