반응형
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개 보다 많다는 의미이다.
그후 정렬 하여 처리해 준다.
반응형
'SQL > MY SQL 문제 풀이(프로그래머스)' 카테고리의 다른 글
[MYSQL] PROGRAMMERS_자동차 평균 대여 기간 구하기 (0) | 2024.02.22 |
---|---|
[MYSQL] PROGRAMMERS_조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.02.22 |
[MYSQL] PROGRAMMERS_가격대 별 상품 개수 구하기 (0) | 2024.02.22 |
[MYSQL] PROGRAMMERS_3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.02.21 |
[MYSQL] PROGRAMMERS_성분으로 구분한 아이스크림 총 주문량 (0) | 2024.02.21 |