Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 同一列中的多个筛选器、聚合和分组_Sql Server_Filtering_Grouping - Fatal编程技术网

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