백엔드 부트캠프[사전캠프]/문제풀이

[SQL 달리기반 레벨 5] 🦚 예산이 가장 큰 프로젝트는?

sintory-04 2025. 2. 2. 14:32

 


    문제 : 🦚 예산이 가장 큰 프로젝트는? 

    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