LeetCode 1251. 平均售价

题目链接:1251. 平均售价

题目描述

表:Prices

Column Name Type
product_id int
start_date date
end_date date
price int

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

表:UnitsSold

Column Name Type
product_id int
purchase_date date
units int

该表可能包含重复数据。

该表的每一行表示的是每种产品的出售日期,单位和产品 id。

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

结果格式如下例所示。

输入:

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

输出:

product_id average_price
1 6.96
2 16.96

解释:

平均售价 = 产品总价 / 销售的产品数量。

产品 1 的平均售价 = ((100 * 5)+(15 * 20) )/ 115 = 6.96

产品 2 的平均售价 = ((200 * 15)+(30 * 30) )/ 230 = 16.96

题目分析

扫一眼左连接,时间范围匹配,分组求值,保留两位。OK,开始问神奇的海螺:

替换题目中的各值:

sql 复制代码
SELECT u.product_id, units * price as totalprice, u.units
FROM UnitsSold u
         LEFT JOIN Prices p
                   ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id 

效果非常好!

接下来分组、计算均价、保留两位:

sql 复制代码
SELECT p.product_id, ROUND(sum(units * price) / sum(units), 2) as average_price
FROM Prices p
         LEFT JOIN UnitsSold u
                   ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
group by p.product_id

运行!

好好好,再套一个非空,下班。

代码

sql 复制代码
SELECT p.product_id, COALESCE(ROUND(sum(units * price) / sum(units), 2), 0) as average_price
FROM Prices p
         LEFT JOIN UnitsSold u
                   ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
group by p.product_id

好,又一段人下人代码,海螺全责🐚

相关推荐
m沐沐6 分钟前
【机器学习】DBSCAN聚类算法——原理、参数调优与实战
人工智能·python·深度学习·算法·机器学习·聚类·dbscan
jnrjian15 分钟前
psql 执行多个 sql 文件
数据库·sql
问商十三载16 分钟前
GEO优化的6个核心诊断工具,2026年实操版详解
人工智能·算法·机器学习
手写码匠34 分钟前
华为云征文|DeepSeek-R1 智能问数 Agent 实战:Flexus X 实例 + Dify 构建企业级 Text-to-SQL 查询助手
人工智能·深度学习·算法·aigc
mifengxing1 小时前
Java集合与泛型
java·算法·复习笔记
liulilittle1 小时前
[OPENPPP2] ssea 算法详解(中文)
算法·x86·x64·simd·openppp2·ssea·base94
碧海银沙音频科技研究院1 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
过期的秋刀鱼!1 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估
m沐沐2 小时前
【自然语言处理】词向量转换与中文文本情感分类——从CountVectorizer到朴素贝叶斯
人工智能·算法·机器学习·自然语言处理·分类·中文分词·词向量转换
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章99-换背景
图像处理·人工智能·opencv·算法·计算机视觉