https://school.programmers.co.kr/learn/courses/30/lessons/131536
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[1차 풀이]
우선 회원별로 재구매한 상품을 파악하고자, GROUP BY를 이용하여 회원별 / 상품별 구매 건수를 보고자 했다.
구매 건수를 어떻게 볼까 생각해보니 동일 날짜, 회원 ID, 상품 ID 조합에 대해서는 1개의 판매 데이터만 존재한다는 조건을 확인하고 COUNT(*) 를 사용했다.
cnt가 2 이상인 경우는 동일 회원 ID / 상품 ID에 대해 2개 이상의 row가 존재한다는 뜻이므로, HAVING을 이용해 조건을 걸어주었다. (GROUP BY 한 데이터에 대해 조건을 걸고싶으면 WHERE가 아니고 HAVING을 사용해야 함)
SELECT user_id, product_id, COUNT(*) AS cnt
FROM online_sale
GROUP BY user_id, product_id
HAVING cnt >= 2
위 코드를 활용하여 문제에서 출력하길 원하는 결과를 출력하고자, 서브쿼리를 이용했다.
문제에서 원하는 정렬 조건을 만들어주기 위해 ORDER BY를 사용했다.
정렬을 원하는 순서대로 column명을 작성해주고, 내림차순의 경우에만 DESC를 column명 뒤에 붙여준다.
SELECT a.user_id, a.product_id
FROM (SELECT user_id, product_id, COUNT(*) AS cnt
FROM online_sale
GROUP BY user_id, product_id
HAVING cnt >= 2) AS a
ORDER BY a.user_id, a.product_id DESC
[2차 풀이]
다른 사람들의 답안이 궁금해 찾아보았다.
SELECT user_id, product_id
FROM online_sale
GROUP BY user_id, product_id
HAVING COUNT(*) >= 2
ORDER BY user_id, product_id DESC
GROUP BY 하고나서 SELECT에 무조건 연산을 한번 해줘야하는줄 알았는데 아니였다
HAVING 절에서 연산을 하고 이를 조건으로 활용할 수 있었다!
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 가격대별 상품 개수 구하기 (0) | 2023.12.26 |
---|---|
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.12.26 |
[프로그래머스] 상위 n개 레코드 (0) | 2023.12.22 |
[프로그래머스] 어린 동물 찾기 (0) | 2023.12.22 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.12.22 |