首页 > 解决方案 > 组的平均值不正确

问题描述

我的查询是这样的...

SELECT
   ClientId,
   AVG(Rate)
FROM
  Clients
GROUP BY
   ClientId
WITH ROLLUP

这给...

NULL, 17.5769
1, 16.75
2, 17.50
3, 18.50
4, 17.50
5, 18.50

那是错误的平均值。应该是 17.75。

这个查询有什么问题?

标签: sql-servertsql

解决方案


您误解了平均值是如何计算的。如果您要计算一个avg 组平均值,您会看到17.75您所期望的:

select ClientID
        ,avg(Rate) as AvgRate
from (values(1, 16.75)
           ,(2, 17.50)
           ,(3, 18.50)
           ,(4, 17.50)
           ,(5, 18.50)
    ) as r(ClientID, Rate)
group by ClientID
with rollup;

输出

+----------+-----------+
| ClientID |  AvgRate  |
+----------+-----------+
| 1        | 16.750000 |
| 2        | 17.500000 |
| 3        | 18.500000 |
| 4        | 17.500000 |
| 5        | 18.500000 |
| NULL     | 17.750000 |
+----------+-----------+

因为您正在使用with rollup它(正确地)为您的总值计算整个数据集的平均值,这与计算组平均值的平均值不同。


推荐阅读