프로그래머스/My SQL

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

싱싱한복초이 2024. 11. 5. 18:26

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제]

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

 

[나의 풀이]

처음에

select user_id, product_id
from online_sale

order by user_id, product_id desc;

이렇게 써놓고 안에를 어떻게 처리해야 할지 모르겠어서

where exist(select...)쓰다가 지우고..

 

💫아이디어: GROUP BY문을 이용하여 USER_ID, PRODUCT_ID 컬럼을 기준으로 집계하고 집계 결과에서 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;

 

 

-참고

https://kkw-da.tistory.com/entry/SQL-%EC%9E%AC%EA%B5%AC%EB%A7%A4%EA%B0%80-%EC%9D%BC%EC%96%B4%EB%82%9C-%EC%83%81%ED%92%88%EA%B3%BC-%ED%9A%8C%EC%9B%90-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4MySQLLevel-2

 

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

안녕하세요! 데코입니다! 오늘은 프로그래머스 코딩테스트 연습에 있는 "재구매가 일어난 상품과 회원 리스트 구하기 문제를 포스팅하려고 합니다! 바로 포스팅 시작할게요! :) (출처 : https://scho

kkw-da.tistory.com

+) 위 블로그에서 자세히 설명되어있는 HAVING과 WHERE의 차이점

 

SQL에서 HAVING 문은 집계 결과에 조건을 넣어 조건에 만족하는 결과를 조회할 때 사용한다.

따라서 GROUP BY문 뒤에 사용을 함.

 

HAVING 문에서는 집계함수를 통해 조건을 추가할 수 있음.

  • MAX : 컬럼의 최댓값을 산출
  • MIN : 컬럼의 최소값을 산출
  • SUM : 컬럼의 값을 합계를 산출
  • COUNT : 컬럼의 갯수를 산출
  • AVG : 컬럼의 평균값을 산출

WHERE 문에서는 데이터에서 ROW(행)에서 조건을 만족하는 데이터만을 필터링하는 구문이고,

HAVING 문은 GROUP BY문을 통해 집계한 이후 만족하는 데이터만을 필터링하는 구문임.