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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。