当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode 1251. 平均售价

来自网友在路上 167867提问 提问时间:2023-10-10 03:15:12阅读次数: 67

最佳答案 问答题库678位专家为你答疑解惑

题目链接:1251. 平均售价

题目描述

表:Prices

Column NameTypeproduct_idintstart_datedateend_datedatepriceint

(product_id,start_date,end_date) 是 prices 表的主键(具有唯一值的列的组合)。
prices表的每一行表示的是某个产品在一段时期内的价格。 每个产品的对应时间段是不会重叠的,这也意味着同一个产品的价格时段不会出现交叉。

表:UnitsSold

Column NameTypeproduct_idintpurchase_datedateunitsint

该表可能包含重复数据。
该表的每一行表示的是每种产品的出售日期,单位和产品 id。

编写解决方案以查找每种产品的平均售价。average_price 应该四舍五入到小数点后两位,返回结果表无顺序要求
结果格式如下例所示。

输入:
Prices table:

product_idstart_dateend_dateprice12019-02-172019-02-28512019-03-012019-03-222022019-02-012019-02-201522019-02-212019-03-3130

UnitsSold table:

product_idpurchase_dateunits12019-02-2510012019-03-011522019-02-1020022019-03-2230

输出:

product_idaverage_price16.96216.96

解释:

平均售价 = 产品总价 / 销售的产品数量。
产品 1 的平均售价 = ((100 * 5)+(15 * 20) )/ 115 = 6.96
产品 2 的平均售价 = ((200 * 15)+(30 * 30) )/ 230 = 16.96

题目分析

扫一眼左连接,时间范围匹配,分组求值,保留两位。OK,开始问神奇的海螺:
在这里插入图片描述
替换题目中的各值:

SELECT u.product_id, units * price as totalprice, u.units
FROM UnitsSold uLEFT JOIN Prices pON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id 

效果非常好!
在这里插入图片描述
接下来分组、计算均价、保留两位:

SELECT p.product_id, ROUND(sum(units * price) / sum(units), 2) as average_price
FROM Prices pLEFT JOIN UnitsSold uON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
group by p.product_id

运行!
在这里插入图片描述
好好好,再套一个非空,下班。

代码

SELECT p.product_id, COALESCE(ROUND(sum(units * price) / sum(units), 2), 0) as average_price
FROM Prices pLEFT JOIN UnitsSold uON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
group by p.product_id

在这里插入图片描述
好,又一段人下人代码,海螺全责🐚

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode 1251. 平均售价":http://eshow365.cn/6-18127-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!