繁体   English   中英

向 SQL 查询添加平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM