Algorithm/SQL

[MySQL] 재구매가 일어난 상품과 회원 리스트 구하기 / HAVING

say! 2026. 6. 25. 10:55
728x90

 

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

  • 같은 사람이 (USER_ID)
  • 같은 상품을 (PRODUCT_ID)
  • 2번 이상 구매했는지 확인

>GROUP BY + HAVING

# 동일한 회원이 동일한 상품을 재구매
# 회원 ID, 재구매 상품 ID
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC

 

WHERE vs HAVING 차이

WHERE

그룹화 전에 행(row) 필터링

 
SELECT *
FROM table
WHERE age >= 20
 

의미:

20살 이상 행만 남긴다
→ 그 다음 GROUP BY
 

HAVING

그룹화 후에 그룹 필터링

예:

 
SELECT department, COUNT(*)
FROM employee
GROUP BY department
HAVING COUNT(*) >= 3
 

의미:

  1. 부서별로 그룹 묶음
  2. 각 그룹 인원수 계산
  3. 인원 3명 이상 그룹만 남김