📝181. Employees Earning More Than Their Managers
🔹 직원이 관리자보다 더 많은 돈을 버는 경우
관리자보다 더 많은 돈을 버는 직원을 찾는 솔루션을 작성하세요.
어떤 순서로든 결과 테이블을 반환합니다.
📝 문제 설명
LeetCode 181번 Employees Earning More Than Their Managers 문제는 같은 Employee 테이블에서 자기 관리자(manager) 보다 더 많은 급여(salary)를 받는 직원(employee)의 이름을 반환하는 SQL 쿼리를 작성하는 것입니다.
관리자는 같은 Employee 테이블에 존재하며, managerId 컬럼을 통해 직원과 연결됩니다.
📊 테이블 구조
Employee 테이블
Column Name | Type |
id | int |
name | varchar |
salary | int |
managerId | int |
💡 SQL 문제 해결 방법
이 문제는 자기 자신의 테이블을 조인(self join) 하는 방식으로 해결할 수 있습니다. managerId를 이용해 직원과 관리자 정보를 같은 테이블 내에서 매칭한 후, 직원의 급여가 관리자보다 높은 경우만 필터링하면 됩니다.
🖥️ SQL 풀이
SELECT a.name AS Employee
FROM Employee a
JOIN Employee b
ON a.managerId = b.id
WHERE a.salary > b.salary
🔍 쿼리 분석
이 쿼리는 Employee 테이블을 두 번 사용하여 JOIN을 수행합니다.
- Self Join 수행: 같은 테이블을 a, b라는 두 개의 별칭(alias)로 나누어 JOIN을 수행합니다.
- 직원과 관리자를 연결: ON a.managerId = b.id 조건을 사용하여 a(직원)의 managerId가 b(관리자)의 id와 일치하는 경우를 찾습니다.
- 급여 비교 조건 적용: WHERE a.salary > b.salary 를 사용하여 직원의 급여(a.salary)가 관리자(b.salary) 보다b.salary 높은 경우만 선택합니다.
- 필드 선택: 급여 조건을 만족하는 직원의 name을 Employee라는 별칭으로 출력합니다.
📌 실행 예제
📊 입력 데이터
Employee 테이블
id | name | salary | managerId |
1 | Joe | 70000 | 3 |
2 | Henry | 80000 | 4 |
3 | Sam | 60000 | Null |
4 | Max | 90000 | Null |
쿼리 실행 결과
Employee |
Joe |
- Joe : 관리자 Sam(60000) 보다 급여(70000)가 높음
🎯 결론
이 문제를 통해 Self Join(자기 조인) 을 활용하여 동일 테이블 내에서 관계를 맺고 데이터를 비교하는 방법을 배울 수 있습니다.
특히, 자기 참조 관계(self-referencing relationship)를 다루는 방법을 이해하는 데 유용하며, 실무에서도 직원-관리자 관계뿐만 아니라 조직 구조, 카테고리 관계, 부모-자식 관계 등의 데이터 모델링에 활용될 수 있습니다.
또한, JOIN을 활용한 데이터 비교 및 필터링 방법을 익히는 좋은 연습이 될 수 있습니다. 🚀
더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀
'LeetCode' 카테고리의 다른 글
[LeetCode] 183. Customers Who Never Order (0) | 2025.02.25 |
---|---|
[LeetCode] 182. Duplicate Emails (0) | 2025.02.24 |
[LeetCode] 175. Combine Two Tables (4) | 2025.02.20 |
[LeetCode SQL50] - Advanced String Functions / Regex / Clause 문제풀이 (2) | 2025.02.19 |
[LeetCode SQL50] - Subqueries 문제풀이 (0) | 2025.02.19 |