오랑우탄의 반란

LeetCode 리트코드 | 1251. Average Selling Price (MySQL) 본문

SQL/LeetCode

LeetCode 리트코드 | 1251. Average Selling Price (MySQL)

5&2 2024. 7. 9. 11:58
반응형

 

오늘도 오랑이는 문제를 풉니다.

 

1251. Average Selling Price

 

풀이 과정

문제를 제대로 읽고 파악합시다. 

 

처음 작성한 코드는 아래와 같았는데 틀렸습니다. 

왜 그런가 단계별로 쿼리를 돌려보며 살펴봤는데 JOIN 했을 때 모든 테이블을 뽑아보니 product_id 별로 값이 중복으로 출력되는 것을 봤습니다. 즉, 제대로 JOIN 이 안 되었다는 걸 알 수 있지요. 

SELECT p.product_id, round(sum(units*price)/sum(units),2) as average_price
FROM prices p JOIN unitssold u ON p.product_id = u.product_id 
GROUP BY p.product_id

 

문제를 다시 살펴봅니다. 

 

1. 조건 이슈

average selling price = total price of product / number of products sold

즉 실제 제품이 판매되었어야 하며, 가격별 판매 여부를 알려면 purchase_date가 start_date와 end_date 사이에 있어야 합니다. 

 

2. NULL 이슈

그리고 LEFT JOIN을 한 이상 null 값이 존재할 수 있기 때문에 잊지 말고 ifnull,0 으로 처리해줘야 합니다. 

 

최종 코드

SELECT p.product_id, round(ifnull(sum(units*price)/sum(units),0),2) as average_price
FROM prices p LEFT JOIN unitssold u 
    ON p.product_id = u.product_id 
    AND purchase_date BETWEEN start_date and end_date
GROUP BY p.product_id

 

 

오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~

 

https://leetcode.com/problems/average-selling-price/

반응형