我有一个函数,可以计算所需数量的平均价格。 假设这是我的桌子:
Name: Quantity: Price:
Item A 10 1
Item A 20 2
Item A 20 3
Item A 20 4
如果我想要某数量的商品A的平均价格,比如说35。我遍历表格并将数量加起来,直到$ total超过$ quanquan(而不是突破),这样就可以行1、2和3在这种情况下总计达到50。
那么,项A的平均价格为(10x1 + 20 x 2 + 20 x 3)/ 50 = 2.2,这就是我想要的输出。
但是,如果您对许多产品都这样做,那么这样做会很繁琐。
问题:
在我用来输出上表的查询中,是否有一种方法可以做到这一点?
类似的东西:
SELECT DISTINCT(Name) as item, SUM(quantity) as Howmuch, MIN(single) as Min
FROM Items
WHERE item = 'Item A'
AND Howmuch > 30
ORDER BY single
?
感谢您的帮助!
答案 0 :(得分:1)
一种方法是使用SUM OVER的总和。
然后从中得出平均值。
样本数据:
create table Items ( Name varchar(30), Quantity int, Price decimal(16,2) ); insert into Items (Name, Quantity, Price) values ('Item A', 10, 1), ('Item A', 20, 2), ('Item A', 20, 3), ('Item A', 20, 4);
查询:
SELECT Name , MIN(CumPriceTotal)/MIN(CumQuantity) AS AvgPrice FROM ( SELECT Name , SUM(Quantity*Price) OVER (PARTITION BY Name ORDER BY Price, Quantity) as CumPriceTotal , SUM(Quantity) OVER (PARTITION BY Name ORDER BY Price, Quantity) as CumQuantity FROM Items ) q WHERE CumQuantity >= 35 GROUP BY Name ORDER BY Name;
Name | AvgPrice :----- | -------: Item A | 2.200000
db <>提琴here
代替使用GROUP BY
和MIN
,使用ROW_NUMBER
获得第一个也可以。
但是我觉得GROUP BY
更简单。