데이터 분석가로 살아남기
[Leetcode] 183. Customers Who Never Order - MySQL 풀이 본문
안녕하세요, 준브로입니다.
오늘은 코딩테스트 플랫폼인 LeetCode에서 183.Customers Who Never Order 문제를 풀이해 보겠습니다.
문제 설명
Write an SQL query to report all customers who never order anything.
Return the result table in any order.
The query result format is in the following example.
문제 해석
- Customers, Orders 두 테이블이 존재.
- 아무 주문도 하지 않은 사람들의 이름을 출력하는 SQL 쿼리를 작성하는 문제입니다.
- LeetCode 주의) Output에 제시된 컬럼명이 정확히 일치해야 정답이기 때문에 Alias를 신경써야 합니다!
풀이 : LEFT JOIN
SELECT c.name AS Customers
FROM customers AS c
LEFT JOIN orders AS o ON o.customerid = c.id -- left join으로 결합
WHERE o.id IS NULL -- orderid가 존재하지 않는 이름 출력
다른 풀이 : NOT IN을 사용한 풀이
SELECT name AS Customers
FROM customers
WHERE id NOT IN (SELECT customerid
FROM orders) -- orders table의 customerid가 포함되지 않은 이름 출력
이 문제는 간단한 두 개의 테이블로 JOIN을 연습해볼 수 있는 문제였습니다.
또한, NOT IN을 사용하여 서브쿼리를 작성하면서 문제를 해결할 수 있습니다. 어떤 관점으로 바라보느냐에 따라서 다양하게 해결되는데, 저 또한 문제를 풀 때 어떤 관점으로 해결할지 고민을 잘 해봐야겠습니다!
업그레이드 해야할 질문)
INNER JOIN을 사용하면 정답이 인정되지 않는데, 그 이유는 무엇일까요?
'SQL' 카테고리의 다른 글
[HackerRank] New Companies - MySQL 풀이 (JOIN할 때 우리가 놓칠 수 있는 것) (0) | 2023.06.15 |
---|---|
[LeetCode] 181. Employees Earning More Than Their Managers - MySQL 풀이 (0) | 2023.05.31 |
[LeetCode] 1179. Reformat Department Table - MySQL 풀이 (0) | 2023.05.30 |
데이터리안 SQL 데이터 분석 캠프 [입문반] 17기 후기 (1) | 2023.05.30 |
[HackerRank] Symmetric Pairs - MySQL 풀이 (0) | 2023.05.26 |