PRACTICE/SQL

[MySQL] 2단계 27. 재구매가 일어난 상품과 회원 리스트 구하기

j1ngerhead 2025. 1. 1. 13:15

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/131536

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(PRODUCT_ID) >= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC;


동일한 회원이 동일한 상품을 2번 이상 구매한 경우만 조회해야 하는 조건이다.

GROUP BY로 동일 회원-상품 조합을 묶고, 
COUNT를 이용해 재구매 여부를 판별한다.
HAVING 절에서 COUNT(PRODUCT_ID) >= 2 조건으로 재구매한 경우만 필터링 한다.

이 문제에서 GROUP BY 절에 PRODUCT_ID를 포함해야 하는 이유

 

  • GROUP BY USER_ID만 사용할 경우, 하나의 USER_ID에 대해 모든 PRODUCT_ID를 묶어 하나의 그룹으로 만든다.
  • 근데 SELECT 절에는 PRODUCT_ID가 들어가 있는 상황 → 각 그룹(USER_ID 그룹)에 대해 어떤 PRODUCT_ID를 반환해야 할지 SQL이 알 수 없는 모호함 발생
  • 따라서 PRODUCT_ID를 GROUP BY에도 포함시켜야 각 USER_ID와 PRODUCT_ID의 조합별로 그룹화가 이뤄지고, SELECT 절에서 문제없이 사용 가능해진다.

 

320x100