[programmers/SQL] 상품 별 오프라인 매출 구하기 : JOIN

Level 2 / JOIN

📌 문제 설명

상품 정보(PRODUCT)와 오프라인 판매 정보(OFFLINE_SALE)를 이용해
상품 코드(PRODUCT_CODE)총 매출액(SALES) 을 구하는 문제이다.


📌 요구사항

  • 두 테이블을 PRODUCT_ID 로 JOIN한다.
  • 상품코드(PRODUCT_CODE)별 매출액 합계를 구한다.
  • 출력 컬럼:
    • PRODUCT_CODE
    • SALES
  • 정렬 조건:
    1. SALES 내림차순
    2. 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_SALESALES_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 -- 생략가능