문제:
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 |
제약사항:
- 두 쿼리 모두 서브쿼리를 사용해주세요.
- 서브쿼리를 통해 특정 조건을 만족하는 데이터를 필터링하고, 그 결과를 최종 쿼리에 반영해야 합니다.
'DATA 사전캠프' 카테고리의 다른 글
15일차 Python 스터디: 단어 맞추기 게임 (0) | 2024.11.23 |
---|---|
15일차 Python 스터디: 스파르타 자판기 (0) | 2024.11.23 |
15일차 SQL 스터디: 가장 많이 팔린 품목은? (0) | 2024.11.22 |
14일차 SQL 스터디: 가장 높은 월급을 받는 직원은? (0) | 2024.11.21 |
14일차 Python 스터디: 랜덤 닉네임 생성기 (0) | 2024.11.21 |