코딩테스트/SQL

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

ONGSIM_2 2024. 4. 26. 17:18

1. 문제

ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

 

2. 출력 예시

 

3. 코드

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC

 

1) GROUP BY (칼럼 이름)

칼럼 이름을 기준으로, 건수(COUNT), 평균(AVG), 합계(SUM) 등의 데이터를 추출할 때 사용한다.

칼럼을 여러 개 지정할 수 있으며, HAVING 절과 함께 사용하여 조건을 부여할 수 있다.

중복 제거에도 사용되며, 그룹 칼럼을 기준으로 자동으로 ORDER BY가 되지만, ORDER BY를 명시적으로 사용하는 편이 좋다.

 

2) HAVING (조건식)

칼럼의 그룹에 대한 조건을 부여하는 질의문이다.

이 문제에서는 재구매를 한 사용자에 대해서만 출력하기를 원하기 때문에, PRODUCT ID와 USER ID가 2건 이상인 경우에 그룹에 포함되도록 한다.

 

3) ORDER BY (칼럼 이름) (DESC)

ORDER BY 칼럼이름을 처리하면, 오름차순으로 정렬된 테이블이 출력된다.

내림자순을 하고 싶다면, 칼럼 이름 뒤에 DESC를 붙여주면 된다.

 


문제 출처

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

 

프로그래머스

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

programmers.co.kr