본문 바로가기

[LeetCode] 607. Sales Person

by qwee0328 2025. 2. 28.

📝 607. Sales Person

🔹 판매원

"RED"라는 이름의 회사와 관련된 주문이 없는 모든 영업사원의 이름을 찾는 솔루션을 작성하세요.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

📝 문제 설명

"RED"라는 이름의 회사와 관련된 주문이 없는 모든 영업사원의 이름을 찾는 문제입니다.

이 문제는 LEFT JOIN서브쿼리를 활용하여 해결할 수 있으며, 특정 조건에 맞는 데이터를 필터링하는 방법을 익힐 수 있습니다.

 

📊 테이블 구조

SalesPerson 테이블

Column Name Type
sales_id int
name varchar
salary int
commission_rate int
hire_date date

 

Company 테이블

Column Name Type
com_id int
name varchar
city varchar

 

Orders 테이블

Column Name Type
order_id int
order_date date
com_id int
sales_id int
amount int

 

 

💡 SQL 문제 해결 방법

  1. LEFT JOIN을 사용하여 SalesPerson, Orders, Company 테이블을 연결합니다.
  2. 서브쿼리를 사용하여 "RED" 회사와 관련된 주문을 수행한 영업사원 ID를 찾습니다.
  3. 메인 쿼리에서 NOT IN 조건을 사용하여 "RED" 회사와 관련된 주문을 하지 않은 영업사원을 필터링합니다.
  4. DISTINCT를 사용하여 중복되는 결과를 제거합니다.

 

728x90

 

🖥️ SQL 풀이

   SELECT DISTINCT a.name
     FROM SalesPerson a
LEFT JOIN Orders b
       ON a.sales_id = b.sales_id
LEFT JOIN Company c
       ON b.com_id = c.com_id
    WHERE a.sales_id NOT IN (
                                 SELECT sales_id
                                   FROM Orders o
                              LEFT JOIN Company p
                                     ON o.com_id = p.com_id
                                  WHERE p.name = 'RED'
                            )

 

 

🔍 쿼리 분석

  • LEFT JOIN: 영업사원과 주문 테이블을 연결하여 주문 여부와 관계없이 모든 영업사원을 가져옵니다.
  • 서브쿼리: "RED" 회사와 관련된 주문을 한 영업사원 ID 목록을 반환합니다.
  • NOT IN: 메인 쿼리에서 "RED" 회사와 관련된 주문을 하지 않은 영업사원을 필터링합니다.
  • DISTINCT: 중복되는 영업사원 이름을 제거합니다.

 

📌 실행 예제

📊 입력 데이터

SalesPerson 테이블

sales_id name salary commission_rate hire_date
1 John 100000 6 4/1/2006
2 Amy 12000 5 5/1/2010
3 Mark 65000 12 12/25/2008
4 Pam 25000 25 1/1/2005
5 Alex 5000 10 2/3/2007

 

Company 테이블

com_id name city
1 RED Boston
2 ORANGE New York
3 YELLOW Boston
4 GREEN Austin

 

Orders 테이블

order_id order_date com_id sales_id amount
1 1/1/2014 3 4 10000
2 2/1/2014 4 5 5000
3 3/1/2014 1 1 50000
4 4/1/2014 1 4 25000

 

쿼리 실행 결과

name
Amy
Mark
Alex
  • John과 Pam은 "RED" 회사의 주문을 처리했기 때문에 결과에서 제외됩니다.

 

🎯 결론

이 문제는 LEFT JOIN과 서브쿼리를 활용하여 특정 조건을 만족하는 데이터를 추출하는 방법을 연습할 수 있는 좋은 예제입니다.

특히 NOT IN 절을 사용하여 특정 조건을 제외한 데이터를 필터링하는 기법은 실무에서 특정 조건에 맞는 고객이나 거래 내역을 추출할 때 자주 사용됩니다.

또한, DISTINCT 키워드를 사용하여 중복 결과를 제거하는 방법도 실무에서 필수적으로 활용됩니다. ✅

마지막으로, 이 문제는 데이터 관계를 이해하고 SQL JOIN을 활용하여 원하는 결과를 도출하는 방법에 대한 실전 감각을 높일 수 있습니다.

 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

728x90
반응형