sql-server - 组的平均值不正确

标签 sql-server tsql

我的查询是这样的...

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。

这个查询有什么问题?

最佳答案

您误解了平均值的计算方式。如果您要计算组平均值的平均值,您将看到您期望的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 |
+----------+-----------+

因为您使用的是汇总,所以它(正确地)计算整个数据集的平均值作为您的总值(value),这不是与计算组平均值的平均值相同。

关于sql-server - 组的平均值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53855276/

相关文章:

sql - 在 SQL Server 中持久显示更新的行

sql-server - SSMS对象浏览器排序顺序?

sql - 我们可以在 SQL 查询中将数据库名称作为参数传递吗?

sql-server - 事务中的sql进度记录

sql-server - 如果事务由SET XACT_ABORT ON终止,则SET XACT_ABORT OFF

mysql - 根据复合主键的值读取增量数据

sql-server - SQL Server 条件序列号

sql-server - 操作数类型冲突 : nvarchar is incompatible with Type_WP_Days

c# - 如何在 C# 中进行参数化 SELECT 查询?

sql-server-2008 - 在 T-SQL 中获取存储过程返回 header 名称的最佳解决方案