미소를뿌리는감자의 코딩

[프로그래머스 2024/01/26] 재구매가 일어난 상품과 회원 리스트 구하기 본문

코딩 테스트/프로그래머스

[프로그래머스 2024/01/26] 재구매가 일어난 상품과 회원 리스트 구하기

미뿌감 2024. 1. 26. 22:57
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/131536

 

프로그래머스

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

programmers.co.kr

 

1. 접근 방법

이번 문제는 order by USER_ID, PRODUCT_ID desc을 한 후, 이를 count(*)를 하는 것에 포인트가 있는 문제이다.

USER_ID 와 PRODUCT_ID 가 같은 녀석끼리 묶이기 때문에, 자연스럼게 재구매한 회원 id와 재구매한 상품 id를

count(*)로 구할 수 있다. 만약 count(*)가 2 이상이면, 출력하도록 한다.

 

처음에 단계별로 올라가면서 코드를 짜다보니 뭔가 지저분하게 코드가 짜여져서 다시 한번 짜보려고 한다.

다시 짜보았다. 이렇게 깔끔해질수가...

정말... 충격적이다...!!!!

+ having의 위력이 대단하다. select로 다시 감쌀 필요가 없어져서 굉장히 편해진당...

* having : 그룹화된 결과에 대한 조건 적용.

 

2. 코드

(전)

-- 코드를 입력하세요
SELECT c.USER_ID, c.PRODUCT_ID from (
SELECT a.user_id, a.product_id, count(*) as ccnt from ONLINE_SALE a
inner join(
SELECT user_id, count(*) as cnt from ONLINE_SALE o
group by user_id) b on a.USER_ID = b.USER_ID 
where cnt>=2
group by a.user_id, a.product_id) c
where ccnt >=2
order by USER_ID, PRODUCT_ID desc

 

(후)

SELECT USER_ID, PRODUCT_ID from ONLINE_SALE
group by USER_ID, PRODUCT_ID
HAVING count(*)>=2
order by USER_ID, PRODUCT_ID desc
728x90