본문 바로가기

[LeetCode] 181. Employees Earning More Than Their Managers

by qwee0328 2025. 2. 24.

📝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(직원)의 managerIdb(관리자)의 id와 일치하는 경우를 찾습니다.
  • 급여 비교 조건 적용: WHERE a.salary > b.salary 를 사용하여 직원의 급여(a.salary)가 관리자(b.salary) 보다b.salary 높은 경우만 선택합니다.
  • 필드 선택: 급여 조건을 만족하는 직원의 nameEmployee라는 별칭으로 출력합니다.

 

📌 실행 예제

📊 입력 데이터

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 문제 모음을 확인해 보세요! 🚀

728x90
반응형