개발일지/SQL

SQL 실전!(6)

프린스 알리 2024. 10. 25.

데이터 설명

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

문제

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

 

기대 결과:

문제 풀이

첫번째~세번째 열 모두 Employees 테이블에서 조회 가능
부서별(GROUP BY Department)로 가장 높은 월급(MAX(Salary))을 받는 직원의 이름

 

(1) 부서별(GROUP BY Department)로 가장 높은 월급(MAX(Salary))을 받는 행을 조회하기
(2) (1)번 테이블에 Employees의 Name컬럼을 LEFT JOIN

 

 

(1) max_salaries

SELECT Department
    , MAX(Salary)
FROM employees
GROUP BY Department

 

(2)

SELECT e.Name
    , max_salaries.Department
    , max_salaries.Salary
FROM
(
    SELECT Department
        , MAX(Salary) AS Salary
    FROM employees
    GROUP BY Department
) max_salaries
LEFT JOIN employees e
ON max_salaries.Department = e.Department
AND max_salaries.Salary = e.Salary

 

결과 확인:

문제

직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요. 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.

 

문제 풀이

  • 열을 조회하는 데 필요한 테이블과 컬럼들
    employees.Name / projects.ProjectName / projects.Budget
  • 행을 조회하는 데 필요한 조건식
    projects.Budget >= 10000

EmployeeProjects에 employees.Name / projects.ProjectName / projects.Budget를 조인

SELECT ep.*
    , e.Name
FROM employeeprojects ep
LEFT JOIN employees e
ON ep.EmployeeID = e.EmployeeID
SELECT ep2.*
    , p.ProjectName
    , p.Budget
FROM
(
    SELECT ep.*
        , e.Name
    FROM employeeprojects ep
    LEFT JOIN employees e
    ON ep.EmployeeID = e.EmployeeID
) ep2
LEFT JOIN projects p
ON ep2.ProjectID = p.ProjectID

조건식으로 조회하기

SELECT ep3.Name
    , ep3.ProjectName
    , ep3.Budget
FROM
(
    SELECT ep2.*
        , p.ProjectName
        , p.Budget
    FROM
    (
        SELECT ep.*
            , e.Name
        FROM employeeprojects ep
        LEFT JOIN employees e
        ON ep.EmployeeID = e.EmployeeID
    ) ep2
    LEFT JOIN projects p
    ON ep2.ProjectID = p.ProjectID
) ep3
WHERE ep3.Budget >= 10000
ORDER BY ep3.Name

결과 확인:

'개발일지 > SQL' 카테고리의 다른 글

챌린지반 숙제 - WITH절 활용하기  (1) 2024.12.09
SQL 실전!(5)  (2) 2024.10.24
SQL 실전!(4)  (2) 2024.10.24
SQL 실전!(3)  (0) 2024.10.24
SQL 실전!(2)  (0) 2024.10.24

댓글