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)