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

[SQL 달리기반] Lv5. 예산이 가장 큰 프로젝트는?

s_y_130 2025. 6. 19. 16:50
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100),
    Department VARCHAR(50),
    Salary INT
);

INSERT INTO Employees (EmployeeID, Name, Department, Salary) VALUES
(1, 'Alice',   'HR',    5000),
(2, 'Bob',     'IT',    7000),
(3, 'Charlie', 'IT',    6000),
(4, 'David',   'HR',    4500),
(5, 'Eve',     'Sales', 5500),
(6, 'Frank',   'IT',    7200);

CREATE TABLE Projects (
    ProjectID INT PRIMARY KEY,
    ProjectName VARCHAR(100),
    Budget INT
);

INSERT INTO Projects (ProjectID, ProjectName, Budget) VALUES
(101, 'Alpha', 10000),
(102, 'Beta',  15000),
(103, 'Gamma', 12000),
(104, 'Delta', 8000);

CREATE TABLE EmployeeProjects (
    EmployeeID INT,
    ProjectID INT,
    PRIMARY KEY (EmployeeID, ProjectID),
    FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID),
    FOREIGN KEY (ProjectID) REFERENCES Projects(ProjectID)
);

INSERT INTO EmployeeProjects (EmployeeID, ProjectID) VALUES
(1, 101),
(2, 101),
(3, 102),
(4, 103),
(5, 104),
(6, 102),
(6, 103);

 

✅문제:

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 쿼리를 작성해주세요.

  • a. 출력 결과에는 직원의 이름, 부서, 그리고 월급이 포함되어야 합니다. 
  • b.기대 결과
Name
Department
Salary
Alice
HR
5000
Frank
IT
7200
Eve
Sales
5500

 

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

  • a.출력 결과에는 직원 이름, 프로젝트 이름, 그리고 프로젝트 예산이 포함되어야 합니다.
Name
ProjectName
Budget
Bob
Beta
15000
Charlie
Beta
15000
Frank
Beta
15000
David
Gamma
12000
Frank
Gamma
12000

 

 

✅제약사항:

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

 

 

✅문제풀이:

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

 

부서별 가장 높은 월급

select Department, max(Salary) 
from Employees
group by Department;

 

최종 결과

select e.Name, e.Department, e.Salary
from Employees e
where e.Salary = (
	select max(Salary) 
	from Employees e2
    where e2.Department=e.Department
);

 

 

 

 

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

select 
	e.Name, 
    p.ProjectName, 
    p.Budget
from Employees e
join EmployeeProjects ep on e.EmployeeID=ep.EmployeeID
join Projects p on p.ProjectID=ep.ProjectID
where p.Budget >= 10000;