组的平均值不正确

Ian*_*ton 2 t-sql sql-server

我的查询是这样的......

SELECT
   ClientId,
   AVG(Rate)
FROM
  Clients
GROUP BY
   ClientId
WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

这给...

NULL, 17.5769
1, 16.75
2, 17.50
3, 18.50
4, 17.50
5, 18.50
Run Code Online (Sandbox Code Playgroud)

这是错误的平均值.它应该是17.75.

这个查询出了什么问题?

iam*_*ave 5

您误解了平均值的计算方式.如果你要计算一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;
Run Code Online (Sandbox Code Playgroud)

产量

+----------+-----------+
| ClientID |  AvgRate  |
+----------+-----------+
| 1        | 16.750000 |
| 2        | 17.500000 |
| 3        | 18.500000 |
| 4        | 17.500000 |
| 5        | 18.500000 |
| NULL     | 17.750000 |
+----------+-----------+
Run Code Online (Sandbox Code Playgroud)

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