본문 바로가기

프로그래머스

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

728x90
반응형
SMALL


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


 



문제 출처

코딩테스트 연습 - 재구매가 일어난 상품과 회원 리스트 구하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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 조합을 가진 행을 출력할 수 있는것이다!

 

 

 

 

티스토리와 깃허브 홈
 

학스의 개발일지

안녕하세요 일상과 코딩공부를 올리고 있는 JAVA개발자 학스입니다. 저는 주로 JAVA, jQuery, PostgreSQL, HIVE을 다루고 있고 코딩테스트공부도 병행중입니다. 제 깃허브 주소인 https://github.com/hacs2772에

hacs2772.tistory.com

 

 

hacs2772 - Overview

개발왕 학스. hacs2772 has 8 repositories available. Follow their code on GitHub.

github.com

 

오류나 궁금하신점은
아래 댓글로 알려주시면 감사하겠습니다.

 

 

 

 

728x90
반응형
LIST