https://school.programmers.co.kr/learn/courses/30/lessons/131536
WITH CTE AS (
SELECT
USER_ID,
PRODUCT_ID,
COUNT(*) AS CNT
FROM
ONLINE_SALE
GROUP BY
USER_ID, PRODUCT_ID
HAVING
COUNT(*) > 1
)
SELECT
USER_ID,
PRODUCT_ID
FROM
CTE
ORDER BY
USER_ID, PRODUCT_ID DESC;
재구매가 일어난 상품을 골라야 하기 때문에 USER_ID, PRODUCT_ID를 GROUP BY로 묶었을 때 tuple이 2개 이상이어야 한다.
이를 위해
CTE 혹은 subquery를 활용한다.
위의 코드처럼 CTE로 임시 테이블을 만들거나, FROM 절에 subquery로 집어넣어서 정답 코드를 작성할 수 있다.
HAVING COUNT(PRODUCT_ID) > 1
그냥 PRODUCT_ID의 갯수가 1개 보다 많다는 조건을 HAVING절로 걸면 된다.
어차피 USER_ID와 PRODUCT_ID를 그룹으로 묶은 것이기 때문이다.