오랑우탄의 반란
LeetCode 리트코드 | 1251. Average Selling Price (MySQL) 본문
반응형
오늘도 오랑이는 문제를 풉니다.
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
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
반응형
'SQL > LeetCode' 카테고리의 다른 글
LeetCode 리트코드 | 1174. Immediate Food Delivery II (MySQL) (0) | 2024.07.11 |
---|---|
LeetCode 리트코드 | 1193. Monthly Transactions I (MySQL) (0) | 2024.07.11 |
LeetCode 리트코드 | 1934. Confirmation Rate (MySQL) (0) | 2024.07.08 |
LeetCode 리트코드 | 570. Managers with at Least 5 Direct Reports (MySQL) (0) | 2024.07.08 |
SELF JOIN 셀프 조인 (MYSQL) (0) | 2024.07.05 |