문제 링크
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
'PRACTICE > SQL' 카테고리의 다른 글
[MySQL] 2단계 29. 자동차 평균 대여 기간 구하기 (0) | 2025.01.01 |
---|---|
[MySQL] 2단계 28. 특정 물고기를 잡은 총 수 구하기 (0) | 2025.01.01 |
[MySQL] 2단계 26. 조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.12.30 |
[MySQL] 2단계 25. ROOT 아이템 구하기 (0) | 2024.12.30 |
[MySQL] 2단계 24. 월별 잡은 물고기 수 구하기 (0) | 2024.12.26 |