FireDrago

[SQL] 상품 별 오프라인 매출 구하기 본문

코딩테스트/프로그래머스

[SQL] 상품 별 오프라인 매출 구하기

화이용 2024. 8. 28. 16:33

문제

풀이

 

처음생각한 풀이 과정은 다음과 같다.

 

1. OFFLINE_SALE 테이블에서 PRODUCT_ID , SUM(SALES_AMOUNT) 값을 조회한다.

2. 과정 1에서 조회한 결과를 조인하여 PRODUCT_CODE , PRICE * SUM(SALES_AMOUNT) 값을 조회한다.

 

WITH 문과 JOIN 을 활용했다.

with cte as(
    select
        PRODUCT_ID, sum(SALES_AMOUNT) as sum
    from
        OFFLINE_SALE
    group by
        PRODUCT_ID
)

select 
    PRODUCT_CODE, cte.sum * PRICE as SALES
from 
    PRODUCT 
JOIN 
    cte
ON 
    cte.PRODUCT_ID = PRODUCT.PRODUCT_ID
order by
    2 desc, PRODUCT_CODE

 

WITH 문은 재사용성가독성이 높다는 장점이 있지만,

쿼리가 두번 실행되어 불필요한 중간값이 생길 수 있다. 

 

위 문제에서 WITH 문을 재사용하지 않으므로,

JOIN을 통해 한번에 원하는 데이터를 조회하는 것이 효율적이다.

select
    p.PRODUCT_CODE,
    sum(s.SALES_AMOUNT) * p.PRICE as SALES
from 
    PRODUCT as p
JOIN
    OFFLINE_SALE as s
ON 
    p.PRODUCT_ID = s.PRODUCT_ID
group by
    p.PRODUCT_ID
order by
    2 desc, p.PRODUCT_CODE asc;