[LeetCode] 1045. Customers Who Bought All Products - SQL

Donghyun·2024년 9월 3일
0

Code Kata - SQL

목록 보기
56/61
post-thumbnail

링크: https://leetcode.com/problems/customers-who-bought-all-products/

Table: Customer

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| customer_id | int     |
| product_key | int     |
+-------------+---------+
This table may contain duplicates rows.
customer_id is not NULL.
product_key is a foreign key (reference column) toProduct table.

Table: Product

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_key | int     |
+-------------+---------+
product_key is the primary key (column with unique values) for this table.

Write a solution to report the customer ids from the Customer table that bought all the products in the Product table.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:
Customer table:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1           | 5           |
| 2           | 6           |
| 3           | 5           |
| 3           | 6           |
| 1           | 6           |
+-------------+-------------+
Product table:
+-------------+
| product_key |
+-------------+
| 5           |
| 6           |
+-------------+
Output:
+-------------+
| customer_id |
+-------------+
| 1           |
| 3           |
+-------------+
Explanation:
The customers who bought all the products (5 and 6) are customers with IDs 1 and 3.

문제풀이

목표: Customer 테이블에서 Product 테이블의 모든 제품을 구매한 customer id 를 조회하라.

최종코드

SELECT customer_id
FROM Customer
GROUP BY customer_id
HAVING COUNT(DISTINCT product_key) = 
    (SELECT COUNT(*) 
     FROM Product);

설명

SELECT customer_id
FROM Customer
GROUP BY customer_id
HAVING COUNT(DISTINCT product_key) = 
    (SELECT COUNT(*) 
     FROM Product);
  • Customer 테이블에서
  • customer_id 를 기준으로 그룹화하고
  • HAVING 절에서 서브쿼리를 사용해 product_key가 서브쿼리의 결과와 같은 것만 필터링한다.
    • 서브쿼리:
      • Product 테이블에서
      • 모든 제품의 수를 COUNT
  • 위의 결과가 반영된 customer_id를 조회.
profile
데이터분석 공부 일기~!

0개의 댓글