Quest/SQL

SQL Quest 달리기반 - 5_2)

beady 2024. 11. 15. 15:11

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 조건을 입력하면 완성

Result

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

result

 

 

길었던 SQL 퀘스트 빠이