erDiagram
Customer {
int customer_id
int product_key
}
Product {
int product_key
}
Customer }o--|| Product : references
목표
PRODUCT를 모두 구매한 고객 구하기
문제 풀이
MySQL
-- Solution 1
WITH NO_DUP AS (
SELECT DISTINCT * FROM CUSTOMER
)
SELECT CUSTOMER_ID
FROM (
SELECT *, COUNT(*) AS CNT
FROM NO_DUP
GROUP BY CUSTOMER_ID
HAVING CNT = (SELECT COUNT(*) FROM PRODUCT)
) AS ALL_PRODUCT
-- Solution 2
WITH TEMP AS (
SELECT DISTINCT C.CUSTOMER_ID, P.PRODUCT_KEY
FROM PRODUCT P
LEFT JOIN CUSTOMER C ON P.PRODUCT_KEY = C.PRODUCT_KEY
)
SELECT CUSTOMER_ID
FROM TEMP
GROUP BY CUSTOMER_ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM PRODUCT)
댓글