当前位置: 首页 > news >正文

LeetCode 1251. 平均售价

题目链接:1251. 平均售价

题目描述

表:Prices

Column NameType
product_idint
start_datedate
end_datedate
priceint

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

表:UnitsSold

Column NameType
product_idint
purchase_datedate
unitsint

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

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

输入:
Prices table:

product_idstart_dateend_dateprice
12019-02-172019-02-285
12019-03-012019-03-2220
22019-02-012019-02-2015
22019-02-212019-03-3130

UnitsSold table:

product_idpurchase_dateunits
12019-02-25100
12019-03-0115
22019-02-10200
22019-03-2230

输出:

product_idaverage_price
16.96
216.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

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

http://www.lryc.cn/news/186738.html

相关文章:

  • TypeScript 笔记:String 字符串
  • 蓝牙技术|Matter或能改变中国智能家居市场,蓝牙技术将得到进一步应用
  • VB.NET vs. VB6.0:现代化编程语言 VS 经典老旧语言
  • ViewPager、RecycleView实现轮播图
  • 【FreeRTOS】【STM32】01从零开始的freertos之旅 浏览源码下的文件夹
  • 【PPT】ppt里面使用svg图标
  • uni-app:实现页面效果4(echarts数据可视化)
  • vue实现echarts中 9种 折线图图例
  • redis实战-实现用户签到UV统计
  • 作为创始人的价值观与心法,构建系统
  • Go语言基础面经
  • 服务器文件备份
  • 剑指offer——JZ68 二叉搜索树的最近公共祖先 解题思路与具体代码【C++】
  • [Spring] @Bean 修饰方法时如何注入参数
  • docker拉取镜像错误 missing signature key
  • 基于可解释性特征矩阵与稀疏采样全局特征组合的人体行为识别
  • OpenCV4(C++)—— 仿射变换、透射变换和极坐标变换
  • http.header.Set()与Add()区别;
  • vue-7-vuex
  • SSO单点登录和OAuth2.0区别
  • 【轻松玩转MacOS】基本操作篇
  • 华为ICT——第三章图像处理基本任务
  • (C++)引用的用法总结
  • Charles:移动端抓包 / windows客户端 iOS手机 / 手机访问PC本地项目做调试
  • 【AI】深度学习——人工智能、深度学习与神经网络
  • RK3288:BT656 RN6752调试
  • LLMs 蒸馏, 量化精度, 剪枝 模型优化以用于部署 Model optimizations for deployment
  • Milvus踩坑笔记
  • 什么是轴电流?轴电流对轴承有什么危害?
  • react create-react-app v5配置 px2rem (不暴露 eject方式)