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 결과에서 조회되지 않는 것이 기본값
'SQL' 카테고리의 다른 글
[Leetcode] 특정 문자열 처리 함수 REGEXP (0) | 2024.06.10 |
---|---|
[Leetcode] 중복ID 제거(DELETE) (0) | 2024.06.08 |
[Leetcode] SUM/AVG() OVER (ORDER BY ~ ROWS ~) (0) | 2024.05.21 |
[Leetcode] LEAD, LAG (0) | 2024.05.21 |
[프로그래머스] SQL 반복문, WITH RECURSIVE (0) | 2024.05.21 |