Sql server 同一列中的多个筛选器、聚合和分组
我想从下表中得到每个城市和每年每单位的平均价格Sql server 同一列中的多个筛选器、聚合和分组,sql-server,filtering,grouping,Sql Server,Filtering,Grouping,我想从下表中得到每个城市和每年每单位的平均价格 Date City Units Price 10/23/2018 Leon 1 1088 2/27/2018 NewYork 1 1312 4/19/2017 Texas 3 3909 4/19/2017 London 1 1303 4/19/2019 NewYork 3 3909
Date City Units Price
10/23/2018 Leon 1 1088
2/27/2018 NewYork 1 1312
4/19/2017 Texas 3 3909
4/19/2017 London 1 1303
4/19/2019 NewYork 3 3909
2/12/2018 Leon 1 1251
4/7/2017 Leon 3 3510
3/20/2019 London 1 1650
12/18/2017 Texas 1 1358
2/18/2019 Leon 1 1088
7/3/2017 NewYork 2 2782
8/8/2019 Texas 1 830
4/5/2018 London 2 3739
1/29/2018 Londres 1 1169
8/9/2019 Texas 1 1130
要获得平均价格,应考虑单位数量,然后应按年份分组,并按每个城市显示如下:
Year City AvgPrice
2017 Leon 1170
2017 London 1303
2017 New York 1391
2017 Texas 1330.5
2018 London 1519.25
2018 New York 1312
2018 Leon 1169.5
2019 Leon 1088
2019 London 1650
2019 New York 1303
2019 Texas 1390
我曾尝试按城市分组,但每年都会变得复杂。谢谢你的帮助 看起来以下方法应该可以起作用:
SELECT
YEAR([Date]) [Year]
, City
, CAST(CAST(SUM(Price) AS decimal(19, 2)) / SUM(Units) AS decimal(19, 2)) AverageUnitPrice
FROM YourTable
GROUP BY
YEAR([Date])
, City
(为了直观地获得准确的输出,您可以将其转换为浮点
,而不是十进制(19,2)
(也不需要外部的转换)
因此,如果你以2美元的价格卖出2,以5美元的价格卖出1,那么平均价格9除以3,等于3美元——否则单次销售的单位权重将大于多次销售的单位权重——这就是求和(单位*价格)的原因。你能告诉我们你尝试了什么,并解释为什么它不起作用吗。谢谢。而且,那些日期看起来很可疑。您没有将它们存储为varchar
是吗?不,日期是日期类型。
SELECT YEAR(Date), City, SUM(1.0 * Units * price) / SUM(1.0 * Units) AS AvPrice
GROUP BY Year(Date), City