SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_재구매가 일어난 상품과 회원 리스트 구하기

몽총한몽이네 2024. 2. 22. 00:24
반응형

SELECT USER_ID,	PRODUCT_ID
FROM ONLINE_SALE 
GROUP BY USER_ID,PRODUCT_ID
having count(USER_ID) > 1
ORDER BY 1,2 desc

 

ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냄

 

문제
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성. 결과는 회원 ID를 기준으로 오름차순 정렬 후 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬

 

해당 문제는 having으로 처리하면 간단한 문제이다. 다른 문제들과 같이 요청 컬럼들을 적어준후 GROUPING은 동일 회원, 동일 상품에 관한 데이터가 필요하니 USER_ID, PRODUCT_ID 순서로 같이 묶어준다. 그 후 중복 구매한 데이터를 구해야하기에 having을 쓴다.

having은 결과 값이 나오고 난 이후의 필터링을 한다고 생각하면 편한데 조건절이 다 처리되어 그루핑된 값을 구한다.

따라서 GROUP BY 에서 USER_ID, PRODUCT_ID 둘이 같이 그루핑 되어 둘중 아무 기준으로 count 처리 해도된다.

임의로 having count(USER_ID) > 1 처리를 해주었다. 그룹된 유저가 같은 상품을 구매한 행이 1개 보다 많다는 의미이다.

 

그후 정렬 하여 처리해 준다.

 

반응형