본문 바로가기
SQL/코딩테스트

[프로그래머스 / MySQL] 상품 별 오프라인 매출 구하기

by Hi_heidi 2024. 1. 31.

문제

💡 PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

 

테이블 형태

PRODUCT 테이블 /  OFFLINE_SALE 테이블
출력 결과 예시

 

풀이

SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
FROM PRODUCT AS P
    JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE

 

해설

FROM PRODUCT AS P
    JOIN OFFLINE_SALE AS O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
  • 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 문제다
  • 1️⃣  PRODUCT 테이블(P)과 OFFLINE_SALE 테이블(O)를 PRODUCT_ID를 기준으로 INNER JOIN한다
    테이블P에 판매가가 있고, 테이블O에 판매량이 있으므로 두 테이블을 조인해줘야 한다. 공통 컬럼은 PRODUCT_ID이며, 가격과 판매량 정보가 모두 존재해야 매출액을 산출할 수 있으므로 두 테이블의 교집합만 남을 수 있도록 INNER JOIN으로 연결해준다
  • 2️⃣상품코드를 기준으로 GROUP BY 한다
SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
  • 제품 코드와 매출액을 SELECT절에 넣는다. 매출액(SALES)은 위의 식으로 구할 수 있는데, 상품코드별 그룹핑 이후 각 상품코드마다 여러 행의 판매내역이 존재하므로 각 판매내역 별 매출액을 SUM으로 모두 합해줘야 한다. 따라서 (PRICE * SALES_AMOUNT)로 각 판매내역 별 매출액을 계산하고 SUM으로 감싸 상품코드의 전체 매출액을 구한다 
ORDER BY SALES DESC, PRODUCT_CODE
  • 최종 결과값을 SALES 기준으로 내림차순, 매출액이 같으면 PRODUCT_CODE 를 기준으로 오름차순 정렬시킨다