[프로그래머스][LV.2] 재구매가 일어난 상품과 회원 리스트 구하기 | Oreacle

2025. 3. 22. 17:14프로그래머스/SQL

문제링크:  재구매가 일어난 상품과 회원 리스트 구하기


문제설명

다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.

 

문제

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

 


 

문제풀이

1. GROUP BY:

  • 목적: 데이터를 하나 이상의 컬럼을 기준으로 그룹화할 때 사용.
  • 사용법:
    GROUP BY 컬럼명, 다른_컬럼명
    
  • 기능: GROUP BY를 사용하면, 특정 컬럼의 값이 동일한 데이터들이 하나의 그룹으로 묶임. 그 후, 집계 함수(COUNT(), SUM(), AVG() 등)를 사용하여 그룹화된 데이터에 대한 계산 가능

2. HAVING:

  • 목적: GROUP BY로 그룹화된 데이터에 대해 조건을 필터링할 때 사용.
  • 사용법:
    HAVING 집계_함수(컬럼명) 조건
    
  • 기능: HAVING은 GROUP BY로 묶은 그룹에 대해 조건을 걸고, 그 조건을 만족하는 그룹만 결과로 반환. WHERE은 각 레코드에 대한 조건을 걸 때 사용하지만, HAVING은 그룹화된 데이터에 조건을 걸 때 사용

3. GROUP BY와 HAVING 함께 사용하기:

  • 순서: GROUP BY로 데이터를 먼저 그룹화하고, 그 후 HAVING을 사용해 그룹화된 결과에 조건을 걸어 필터링.
  • 전체 흐름: GROUP BY → 집계 함수 적용 → HAVING으로 조건 추가.

예시:

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(PRODUCT_ID) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;
  • USER_ID와 PRODUCT_ID별로 그룹화하고, PRODUCT_ID가 2개 이상인 그룹만 필터링 후, USER_ID 오름차순, PRODUCT_ID 내림차순으로 정렬

 

 

나의코드

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING count(PRODUCT_ID) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;코드

 


 

더보기

참고하기