Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

leet code sql 1045

leet code sql 1045

문제


  • 고객, 상품 테이블이 존재한다.
  • 상품 테이블에 모든 상품을 구매한 고객을 추출하라

문제 접근


  • 모든 상품을 구매한 고객을 알기 위해서는 유저가 산 상품의 수와 상품 수와 동일해야한다.
  • 이 때 무조건 중복을 제거한 값으로만 처리
  • 처음에는 group by를 하나만 엮은 뒤, distinct 처리하는 것을 놓쳐서 cte 함수로 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1차
with cte as (
select 
    customer_id,
    c.product_key
from Customer c
join Product p
    on c.product_key = p.product_key
group by 1,2
)
select
    customer_id
from cte
group by 1
having count(*) = (select count(*) from Product)

# 2차
select customer_id
from Customer
group by customer_id
having count(DISTINCT product_key) = (select count(*) from Product)