代码编织梦想

表: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 应该 四舍五入到小数点后两位

返回结果表 无顺序要求 。

结果格式如下例所示。

示例 1:

输入:
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

方法一:JOIN
思路

本题需要计算每个产品的平均售价,平均售价 = 销售总额 / 总数量,因此我们只需要计算除每个产品的销售总额和总数量即可。

总数量可以直接使用 UnitsSold 计算得出,使用 GROUP BY 和 SUM 函数即可:


select p.product_id,IFNULL(round(sum(p.price*u.units) /sum(units),2),0)average_price 
from Prices p left join UnitsSold u on  p.product_id = u.product_id
and u.purchase_date between start_date and end_date 
group by p.product_id 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44625745/article/details/139553376

LeetCode-1251. 平均售价(简单)-爱代码爱编程

Table: Prices +---------------+---------+ | Column Name   | Type    | +---------------+---------+ | product_id    | int     | | start_date    | date    | | end_date      | date  

mysql查询-爱代码爱编程

一、准备工作 创建数据库select_database创建数据表product并插入数据#创建数据库 CREATE DATABASE select_database; #切换数据库 USE select_database; #创建商品表 CREATE TABLE product( pid INT PRIMARY KEY, pname VARCHAR(

如何解决SQL中求平均值的问题-爱代码爱编程

SQL中求平均值得问题可能用到的聚合函数: AVG() :求列的平均值 SUM():求和行的和 COUNT():计算行的数目 ROUND():结果保留几位小数,例:ROUND(a,2)保留两位小数 下面看一个例题: Table: Prices +---------------+---------+ | Column Name | Type

Easy之1251.平均售价-爱代码爱编程

Table: Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint(product_id,start_date,end_date) 是 Prices 表的主键。 Prices 表的每一行表示的是某个产品在一段时期内的价格。 每个产品的对应时间段是不会重叠的,这也意味着同

每日一题-73(平均售价)-爱代码爱编程

题73: 根据下面两个表编写SQL查询以查找每种产品的平均售价,其中average_price 应该四舍五入到小数点后两位。 其中: Prices表:(product_id,start_date,end_date) 是 Prices 表的主键;Prices 表的每一行表示的是某个产品在一段时期内的价格;每个产品的对应时间段是不会重叠的,这也意味着同一个

Leetcode SQL会员题【吐血总结~~】第四天-爱代码爱编程

目录 1173. 即时食物配送 I1174. 即时食物配送 II1193. 每月交易 I1194. 锦标赛优胜者1204. 最后一个能进入电梯的人1205. 每月交易II1211. 查询结果的质量和占比1212. 查询球队积分1225. 报告系统状态的连续日期1241. 每个帖子的评论数1251. 平均售价1264. 页面推荐1270. 向公司CEO汇报

题目:1251.平均售价-爱代码爱编程

​ ​题目来源:         leetcode题目,网址:1251. 平均售价 - 力扣(LeetCode) 解题思路:         首先根据产品 id 和 销售日期连接两表,然后根据产品 id 分组聚合,最后计算结果。 解题代码: # Write your MySQL query statement below select dist

leetcode 1251. 平均售价_狗狗狗狗狗乐啊的博客-爱代码爱编程

题目链接:1251. 平均售价 题目描述 表:Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint (product_id,

sql练习 -爱代码爱编程

表:Prices +---------------+---------+ | Column Name | Type | +---------------+---------+ | product_id | int | | start_date | date | | end_date | date | |

力扣-爱代码爱编程

一、题目 二、代码 # Write your MySQL query statement below select Prices.product_id, coalesce(round(sum(price*units