[leetcode]1251. Average Selling Price

김준석·2024년 2월 5일

코딩테스트 - SQL

목록 보기
62/96

문제

https://leetcode.com/problems/average-selling-price/description/?envType=study-plan-v2&envId=top-sql-50

코드

WITH sell AS(
    SELECT
        pr.product_id,
        pr.price,
        unit.units
    FROM
        Prices pr
        LEFT JOIN UnitsSold unit
            ON pr.product_id=unit.product_id
WHERE 1=1
    AND unit.purchase_date BETWEEN pr.start_date AND end_date
    OR purchase_date is null
)
SELECT 
    product_id,
    CASE
        WHEN units IS NULL THEN 0 ELSE ROUND(SUM(price*units)/SUM(units),2) END AS average_price
FROM 
    sell
GROUP BY
    product_id

후기

후.. 테이블을 묶었을 때 NULL 값이 나오기 때문에 이를 잘 처리 해줘야 됨.

WHERE 1=1
    AND unit.purchase_date BETWEEN pr.start_date AND end_date
    OR purchase_date is null

LEFT JOIN을 하게 되면 purchase_date에서 null값이 발생하는데
이 부분에서 purchase_date 는 start, end 데이터 사이에 오게 하는 조건절만 쓰면 null값은 출력이 안됨.
그래서 purchase_date is null 을 추가 해줌

0개의 댓글