재구매가 일어난 상품과 회원 리스트 구하기
문제 출처
코딩테스트 연습 - 재구매가 일어난 상품과 회원 리스트 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
Code
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC
#ONLINE_SALE 테이블에서
#---> FROM테이블을 보여주고있다
#동일한 회원이 동일한 상품을 재구매한 데이터를 구하여,
#---> 조건문을 설명해주고있다.
#재구매한 회원 ID와 재구매한 상품 ID를 출력
#---> SELECT문을 설명해주고있다
#결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
#---> 정렬방법을 설명해주고있다.
Code설명 & TIPS
풀이 방법!
ONLINE_SALE 테이블에서
---> FROM테이블을 보여주고있다
동일한 회원이 동일한 상품을 재구매한 데이터를 구하여,
---> 조건문을 설명해주고있다.
재구매한 회원 ID와 재구매한 상품 ID를 출력
---> SELECT문을 설명해주고있다
결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
---> 정렬방법을 설명해주고있다.
설명!
여기서 중요한건 조건문이다.
GROUP BY USER_ID, PRODUCT_ID 이렇게 해서 중복된 것들을 먼저 묶어주고
HAVING을 통해 2번 묶인걸 출력해주는 원리인 것이다.
HAVING을 쓰지 않는다면 그냥 공통된것들끼리만 묶이게 될것이다.
정리 및 자세한 설명을 하자면
고로 GROUP BY USER_ID, PRODUCT_ID 이 부분은 USER_ID와 PRODUCT_ID 열을 기준으로 데이터를 그룹화한다.
즉, 동일한 USER_ID와 PRODUCT_ID 조합을 하나의 그룹으로 묶는 것이다.
HAVING COUNT(*) > 1 이 부분은 각 그룹의 크기를 확인하는 작업이다.
COUNT(*)는 현재 그룹에 속한 행의 수를 나타내며, 이 부분은 해당 그룹의 크기가 2 이상인 그룹만을 선택하도록 필터링한다.
따라서 이 부분은 중복된 조합을 가진 그룹만을 선택하게 된다.
결과적으로, GROUP BY 및 HAVING을 사용하면 중복된 USER_ID와 PRODUCT_ID 조합을 가진 행을 출력할 수 있는것이다!
티스토리와 깃허브 홈
오류나 궁금하신점은
아래 댓글로 알려주시면 감사하겠습니다.
'프로그래머스' 카테고리의 다른 글
(MySQL / 프로그래머스) 여러 기준으로 정렬하기 (0) | 2023.09.21 |
---|---|
(MySQL / 프로그래머스) 동물의 아이디와 이름 (0) | 2023.09.21 |
(MySQL / 프로그래머스) 어린 동물 찾기 (0) | 2023.09.21 |
(MySQL / 프로그래머스) 아픈 동물 찾기 (0) | 2023.09.21 |
(MySQL / 프로그래머스) 역순 정렬하기 (0) | 2023.09.21 |