📝 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 문제 해결 방법
- LEFT JOIN을 사용하여 SalesPerson, Orders, Company 테이블을 연결합니다.
- 서브쿼리를 사용하여 "RED" 회사와 관련된 주문을 수행한 영업사원 ID를 찾습니다.
- 메인 쿼리에서 NOT IN 조건을 사용하여 "RED" 회사와 관련된 주문을 하지 않은 영업사원을 필터링합니다.
- 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
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 1050. Actors and Directors Who Cooperated At Least Three Times (2) | 2025.03.04 |
---|---|
[LeetCode] 627. Swap Salary (0) | 2025.03.04 |
[LeetCode] 586. Customer Placing the Largest Number of Orders (2) | 2025.02.28 |
[LeetCode] 577. Employee Bonus (0) | 2025.02.27 |
[LeetCode] 511. Game Play Analysis 1 (0) | 2025.02.27 |