[英]Adding averages to SQL query
我正在尝试创建一个查询来显示不同国家/地区之间的平均销售额,但我还想添加第 4 列,其中显示该国家/地区的总平均值...
这是我的查询,用于选择工作正常的国家/地区之间的平均值:
SELECT Avg([Sales]), [From Country],[To Country],
FROM [DB]
GROUP by [From Country],[To Country]
但我还想添加第 4 列,显示 [From Country] 的总平均销售额,可以这样做吗?
在这里你必须小心。 您可以使用窗口函数,但要获得无偏平均值,您需要按总数计算总数:
SELECT [From Country], [To Country], Avg([Sales]),
SUM(SUM(Sales)) OVER (PARTITION BY [From Country]) / SUM(COUNT(*)) OVER (PARTITION BY [From Country])
FROM [DB]
GROUP by [From Country], [To Country];
请注意,结果不同于:
AVG(AVG(SALES)) OVER (PARTITION BY [From Country])
这是一个有偏见的(或加权的)平均值,它平等地对待每个TO COUNTRY
。
您还可以使用ROLLUP
SELECT [From Country], [To Country], [Avg], [Avg From]
FROM
(
SELECT [From Country], [To Country]
, AVG([Sales]) AS [Avg]
, MAX(CASE WHEN GROUPING_ID([From Country], [To Country]) = 1 THEN AVG([Sales]) END) OVER (PARTITION BY [From Country]) AS [Avg From]
, GROUPING_ID([From Country], [To Country]) AS GroupingId
FROM [DB]
GROUP BY [From Country], [To Country]
WITH ROLLUP
) q
WHERE GroupingId = 0;
在这里测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.