[programmers/SQL] 상품 별 오프라인 매출 구하기 : JOIN
Level 2 / JOIN
📌 문제 설명
상품 정보(PRODUCT)와 오프라인 판매 정보(OFFLINE_SALE)를 이용해
각 상품 코드(PRODUCT_CODE) 별 총 매출액(SALES) 을 구하는 문제이다.
📌 요구사항
- 두 테이블을
PRODUCT_ID로 JOIN한다. - 상품코드(PRODUCT_CODE)별 매출액 합계를 구한다.
- 출력 컬럼:
- PRODUCT_CODE
- SALES
- 정렬 조건:
- SALES 내림차순
- PRODUCT_CODE 오름차순
📌 예시 입력
PRODUCT
| PRODUCT_ID | PRODUCT_CODE | PRICE |
|---|---|---|
| 1 | A1000011 | 15000 |
| 2 | A1000045 | 8000 |
| 3 | C3000002 | 42000 |
OFFLINE_SALE
| PRODUCT_ID | SALES_AMOUNT | SALES_DATE |
|---|---|---|
| 1 | 2 | 2022-02-21 |
| 1 | 2 | 2022-03-02 |
| 3 | 3 | 2022-05-01 |
| 2 | 1 | 2022-05-24 |
| 1 | 2 | 2022-07-14 |
| 2 | 1 | 2022-09-22 |
📌 예시 출력
| PRODUCT_CODE | SALES |
|---|---|
| C3000002 | 126000 |
| A1000011 | 90000 |
| A1000045 | 16000 |
첫번째 제출 코드
SELECT p.PRODUCT_CODE, SUM(p.PRICE) AS SALES
FROM PRODUCT AS p
JOIN OFFLINE_SALE AS o
ON p.PRODUCT_ID = o.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
ORDER BY PRODUCT_CODE ASC -- 생략가능
틀렸다. 전체 테이블을 조회해보고 OFFLINE_SALE에 SALES_AMOUNT가 있다는게 다시 생각나서 매출액을 PRICE * SALES_AMOUNT로 수정해주었다.
그리고 정렬기준에도 두가지가 있었는데, ORDER BY 뒤에 순번대로 정렬기준또한 같은 순번으로 작동하기 때문에 그렇게 수정하였다.
정답 코드
SELECT p.PRODUCT_CODE, SUM(p.PRICE*o.SALES_AMOUNT) AS SALES
FROM PRODUCT AS p
JOIN OFFLINE_SALE AS o
ON p.PRODUCT_ID = o.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC -- 생략가능