알고리즘 공부/SQL

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

마달랭 2024. 10. 18. 16:37
반응형

테이블 정보

1. PRODUCT

Column name Type Nullable
PRODUCT_ID INTEGER FALSE
PRODUCT_CODE VARCHAR(8) FALSE
PRICE INTEGER FALSE

 

 

2. OFFLINE_SALE

Column name Type Nullable
OFFLINE_SALE_ID INTEGER FALSE
PRODUCT_ID INTEGER FALSE
SALES_AMOUNT INTEGER FALSE
SALES_DATE DATE FALSE

 

 

예시 테이블

1. PRODUCT

PRODUCT_ID PRODUCT_CODE PRICE
1 A1000011 15000
2 A1000045 8000
3 C3000002 42000

 

 

2. OFFLINE_SALE

OFFLINE_SALE_ID PRODUCT_ID SALES_AMOUNT SALES_DATE
1 1 2 2022-02-21
2 1 2 2022-03-02
3 3 3 2022-05-01
4 2 1 2022-05-24
5 1 2 2022-07-14
6 2 1 2022-09-22

 

 

문제

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

 

 

아이디어

  1. 우선 상품코드 별 판매량을 알아야 한다. 서브쿼리를 통해 PRODUCT_ID별 판매량을 구해준다.
  2. 이때 OFFLINE_SALE 테이블의 PRODUCT_ID는 여러개 이므로 GROUP BY를 사용해 집계해 준다.
  3. PRODUCT 테이블과 서브쿼리를 PRODUCT_ID로 INNER JOIN해준다.
  4. PRODUCT_CODE와 PRICE * 서브쿼리의 판매량을 곱해 출력해 준다.
  5. ORDER BY는 문제의 조건에 따라 2 내림차순, 1오름차순으로 진행해 준다.

 

정답

-- 코드를 입력하세요
SELECT A.PRODUCT_CODE, A.PRICE * B.SALES_AMOUNT AS SALES
FROM PRODUCT A
INNER JOIN (
    SELECT PRODUCT_ID, SUM(SALES_AMOUNT) AS SALES_AMOUNT
    FROM OFFLINE_SALE
    GROUP BY PRODUCT_ID
) B
ON A.PRODUCT_ID = B.PRODUCT_ID
ORDER BY 2 DESC, 1

 

 

참고사항

서브쿼리는 OFFLINE_SALE 테이블을 참조하여 PRODUCT_ID별 SALES_AMOUNT의 합을 SUM으로 구해준다.

 

728x90
반응형