Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

데이터 분석가로 살아남기

[Leetcode] 183. Customers Who Never Order - MySQL 풀이 본문

SQL

[Leetcode] 183. Customers Who Never Order - MySQL 풀이

junbro 2023. 5. 30. 23:19

안녕하세요, 준브로입니다. 

오늘은 코딩테스트 플랫폼인 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을 사용하면 정답이 인정되지 않는데, 그 이유는 무엇일까요?