DATA 사전캠프

15일차 SQL 스터디: 예산이 가장 큰 프로젝트는?

sawo11 2024. 11. 22. 21:52

문제:

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

요구사항:

1. 각 직원이 속한 부서에서 가장 높은 월급을 받는 직원들만 포함된 결과를 조회하는 SQL 쿼리를 작성해주세요

- 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다

// 내가 짠 쿼리 --> 완전 틀림
SELECT e.Name, 
	e.Department, 
	e.Salary
FROM Employees e
GROUP BY Department // GROUP BY를 사용할 경우 SELECT절에 나열된 모든 열은 그룹에 포함되거나 집계함수를 사용해야함
	HAVING Max(Salary); // HAVING은 결과를 필터링할 때 사용, HAVING MAX(Salary) > 5000처럼 조건 명시 필요
    
// 정답
SELECT e.Name,
    e.Department,
    e.Salary
FROM Employees e
WHERE 
    e.Salary = (
        SELECT MAX(Salary)
        FROM Employees e2
        WHERE e2.Department = e.Department
    );

 

- 기대 결과

Name Department Salary
Alice HR 5000
Frank IT 7200
Eve Sales 5500

 

2. 직원이 참여한 프로젝트 중 예산이 10,000 이상인 프로젝트만을 조회하는 SQL 쿼리를 작성해주세요

- 출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다

SELECT e.Name, 
	p.ProjectName,
	p.Budget
FROM EmployeeProjects ep
JOIN Employees e ON ep.EmployeeID = e.EmployeeID
JOIN Projects p ON ep.ProjectID = p.ProjectID
WHERE p.Budget >= 10000;

 

- 기대 결과

Name ProjectName Budget
Bob Beta 15000
Charlie Beta 15000
Frank Beta 15000
David Gamma 12000
Frank Gamma 12000

제약사항:

  • 두 쿼리 모두 서브쿼리를 사용해주세요.
  • 서브쿼리를 통해 특정 조건을 만족하는 데이터를 필터링하고, 그 결과를 최종 쿼리에 반영해야 합니다.