SQL 초보자 입장에서 약간 난이도가 있었던 문제에 대한 회고다 문제는 위 사이트에 나와 있으니 생략 하겠다.
정답
SELECT DISTINCT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
WHERE (USER_ID, PRODUCT_ID) IN (
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
)
ORDER BY 1, 2 DESC;
풀이
회원 아이디와 상품 코드가 같은 행이 2개 이상인 것을 조건에 넣어 추출하기로 했다.
이때 나는 초심자기 때문에 조건은 WHERE 절이지!라는 생각에 조금 절여 저 있어 IN 옵션을 주고 WHERE 서브쿼리를 넣어 서브쿼리 안에서 회원 아이디와 상품 코드를 추출했다.
답은 쉽게 맞추긴 했으나 답 공유 부분에서 어떤 분이 WHERE 절 필요 없이 그냥 바로 GROUP BY 하신걸 보고 좀 더 유연하게 생각하자고 다짐했다. 그분 코드는 아래에 첨부한다.
SELECT USER_ID
, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC