프로그래머스 SQL 재구매가 일어난 상품과 회원 리스트 구하기

정민교·2024년 3월 16일
0

SQL프로그래머스

목록 보기
14/25

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개 이상이어야 한다.

이를 위해

  1. CTE 혹은 subquery를 활용한다.
    위의 코드처럼 CTE로 임시 테이블을 만들거나, FROM 절에 subquery로 집어넣어서 정답 코드를 작성할 수 있다.

  2. HAVING COUNT(PRODUCT_ID) > 1
    그냥 PRODUCT_ID의 갯수가 1개 보다 많다는 조건을 HAVING절로 걸면 된다.
    어차피 USER_ID와 PRODUCT_ID를 그룹으로 묶은 것이기 때문이다.

profile
백엔드 개발자

0개의 댓글