SQL

[Leetcode] IFNULL, JOIN 다중조건

DAdiary 2024. 5. 25. 12:55

1251. Average Selling Price

 

 

product의 가격 테이블과 판매된 수량에 대한 테이블이 있는 것을 조인해서 '(판매가격*수량) / 판매수량'으로 평균 판매 가격을 구하는 문제였다.

 

단, 신경써야 할 부분이 2가지 였는데,

1. 정답 쿼리는 단 한개도 판매되지 않은 상품까지도 결과에 조회가 되야 한다는 것 (IFNULL 사용)

2. 같은 상품이라도 판매한 날짜에 따라 가격이 다르다는 것 (JOIN 조건 추가)

 

[정답]

SELECT product_id
     , IFNULL(ROUND(SUM(total) / SUM(units),2),0) AS average_price -- 만일 unitssold의 값이 없어서 null이라면 0을 반환
FROM (
    SELECT p.product_id -- p로 left join했기 때문에 p의 product_id를 조회해야 함
        , u.purchase_date
        , p.price
        , u.units
        , p.price*u.units AS total
    FROM prices p
    LEFT OUTER JOIN unitssold u ON p.product_id = u.product_id AND
        u.purchase_date BETWEEN p.start_date AND p.end_date
)a
GROUP BY product_id

NULL인 product_id는 group by 결과에서 조회되지 않는 것이 기본값