PRODUCT 테이블과 OFFLINE_SALE 테이블을 활용해 상품별 매출액(가격 × 판매량)의 합계를 매출액 내림차순, 상품코드 오름차순으로 조회하는 문제이다.
| 테이블 | 주요 컬럼 |
|---|---|
PRODUCT | PRODUCT_ID, PRODUCT_CODE, PRICE |
OFFLINE_SALE | PRODUCT_ID, SALES_AMOUNT, SALES_DATE |
두 테이블 모두 PRODUCT_ID를 공통으로 갖고 있어서, 이걸 기준으로 연결할 수 있다.
문제를 읽고 아래처럼 흐름을 잡아보았다.
PRODUCT_ID를 공통 키로 JOIN해야 한다. PRICE(가격)는 PRODUCT 테이블에, SALES_AMOUNT(판매량)는 OFFLINE_SALE 테이블에 있기 때문에 두 테이블을 연결해야 매출액을 계산할 수 있다.
매출액은 가격 × 판매량이므로 P.PRICE * O.SALES_AMOUNT로 계산하고, 상품별 합계를 구해야 하므로 SUM()과 GROUP BY PRODUCT_CODE를 함께 사용하였다.
정렬 기준은 두 가지였다. 매출액 내림차순이 1순위, 상품코드 오름차순이 2순위이므로 ORDER BY SALES DESC, PRODUCT_CODE ASC로 표현하였다.
구체적으로 정리한 풀이 흐름:
PRODUCT_ID 기준으로 JOINP.PRICE * O.SALES_AMOUNT로 매출액 계산SUM()과 GROUP BY PRODUCT_CODE로 상품별 매출 합계ORDER BY SALES DESC, PRODUCT_CODE ASC로 정렬SELECT
P.PRODUCT_CODE,
SUM(P.PRICE * O.SALES_AMOUNT) AS SALES
FROM
PRODUCT P
JOIN
OFFLINE_SALE O ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY
P.PRODUCT_CODE
ORDER BY
SALES DESC,
P.PRODUCT_CODE ASC
이 문제의 핵심은 JOIN + GROUP BY + SUM()을 조합하는 것 이었다.
JOIN으로 두 테이블을 연결하고, GROUP BY로 상품별로 묶은 뒤, SUM()으로 매출액을 집계한다.
SUM(P.PRICE * O.SALES_AMOUNT)처럼 집계함수 안에 계산식을 넣을 수 있다는 것도 챙겨야 할 포인트이다.