LeetCode //MySQL - 1251. Average Selling Price

1251. Average Selling Price

Table: Prices

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| product_id | int |

| start_date | date |

| end_date | date |

| price | int |

±--------------±--------+

(product_id, start_date, end_date) is the primary key (combination of columns with unique values) for this table.

Each row of this table indicates the price of the product_id in the period from start_date to end_date.

For each product_id there will be no two overlapping periods. That means there will be no two intersecting periods for the same product_id.

Table: UnitsSold

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| product_id | int |

| purchase_date | date |

| units | int |

±--------------±--------+

This table may contain duplicate rows.

Each row of this table indicates the date, units, and product_id of each product sold.

Write a solution to find the average selling price for each product. average_price should be rounded to 2 decimal places. If a product does not have any sold units, its average selling price is assumed to be 0.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:

Prices table:

±-----------±-----------±-----------±-------+

| product_id | start_date | end_date | price |

±-----------±-----------±-----------±-------+

| 1 | 2019-02-17 | 2019-02-28 | 5 |

| 1 | 2019-03-01 | 2019-03-22 | 20 |

| 2 | 2019-02-01 | 2019-02-20 | 15 |

| 2 | 2019-02-21 | 2019-03-31 | 30 |

±-----------±-----------±-----------±-------+

UnitsSold table:

±-----------±--------------±------+

| product_id | purchase_date | units |

±-----------±--------------±------+

| 1 | 2019-02-25 | 100 |

| 1 | 2019-03-01 | 15 |

| 2 | 2019-02-10 | 200 |

| 2 | 2019-03-22 | 30 |

±-----------±--------------±------+

Output:

±-----------±--------------+

| product_id | average_price |

±-----------±--------------+

| 1 | 6.96 |

| 2 | 16.96 |

±-----------±--------------+

Explanation: Average selling price = Total Price of Product / Number of products sold.

Average selling price for product 1 = ((100 * 5) + (15 * 20)) / 115 = 6.96

Average selling price for product 2 = ((200 * 15) + (30 * 30)) / 230 = 16.96

From: LeetCode

Link: 1251. Average Selling Price


Solution:

Ideas:
  • Join Prices and UnitsSold on:
    • same product_id
    • purchase_date within start_date and end_date
  • For each product:
    • Compute total revenue = SUM(price * units)
    • Compute total units sold = SUM(units)
    • Average price = total revenue / total units
  • Use LEFT JOIN so products with no sales are included.
  • Use IFNULL(..., 0) to return 0 when a product has no sold units.
  • Round the result to 2 decimal places using ROUND().
Code:
sql 复制代码
# Write your MySQL query statement below
SELECT
    p.product_id,
    IFNULL(ROUND(SUM(p.price * u.units) / SUM(u.units), 2), 0) AS average_price
FROM Prices p
LEFT JOIN UnitsSold u
    ON p.product_id = u.product_id
   AND u.purchase_date BETWEEN p.start_date AND p.end_date
GROUP BY p.product_id;
相关推荐
怕浪猫5 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
yyy(十一月限定版)5 小时前
224redfg
c语言
无线通信科研笔记5 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_36 小时前
二叉树の递归遍历
算法
All for pursuit.7 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉7 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
lhbweilai9 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机
一只小小的芙厨9 小时前
【线性DP】
学习·算法·动态规划
xxwl5859 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
奋发向前wcx9 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法