본문 바로가기

SQL/DataLemar

[PostgreSQL] (Medium) Supercloud Customer [Microsoft SQL Interview Question]

문제: https://datalemur.com/questions/supercloud-customer

 

나의 풀이

SELECT customer_id
FROM customer_contracts
    JOIN products USING (product_id)
GROUP BY customer_id
HAVING COUNT(DISTINCT product_category) = (
  SELECT COUNT(DISTINCT product_category)
  FROM products)
ORDER BY customer_id;

 

못 풀 수도 있겠는데? 싶었는데 풀어서 기분 조타 ^^

 

위드문을 사용한 솔루션 쿼리

WITH supercloud AS (
SELECT 
  customers.customer_id, 
  COUNT(DISTINCT products.product_category) as unique_count
FROM customer_contracts AS customers
LEFT JOIN products 
  ON customers.product_id = products.product_id
GROUP BY customers.customer_id
)

SELECT customer_id
FROM supercloud
WHERE unique_count = (
  SELECT COUNT(DISTINCT product_category) 
  FROM products)
ORDER BY customer_id;

 

레프트 조인을 안 해도 되지 않을까?

모든 카테고리에서 구매이력이 있는 고객을 찾는거니까 🤔

 

위드 문을 쓰는 게 좋은 상황

웨어나 해빙으로 조건문을 쓰는 게 좋은 상황이 뭔지는 잘 모르겠당