1251. 平均售价

Table: Prices

Column Name Type
product_id int
start_date date
end_date date
price int

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

Table: UnitsSold

Column Name Type
product_id int
purchase_date date
units int

UnitsSold 表没有主键,它可能包含重复项。
UnitsSold 表的每一行表示的是每种产品的出售日期,单位和产品 id。

编写SQL查询以查找每种产品的平均售价。
average_price 应该四舍五入到小数点后两位。

给出解答:

SELECT product_id, 
       ROUND(sum(a) / sum(units), 2) as average_price 
FROM 
(
SELECT p.product_id AS product_id,
       price, 
       units, 
       price * units AS a
FROM Prices AS p 
LEFT JOIN UnitsSold AS u
ON p.product_id = u.product_id 
AND (purchase_date <= end_date AND purchase_date >= start_date)
) AS t
GROUP BY product_id

这道题的关键点在于如何将一个日期与时间段相对应。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-selling-price
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(SQL学习)