首页 > 解决方案 > 在 SQL Server 中计算平均值

问题描述

我想做一些非常简单的事情,但我显然错过了一个技巧!我想获得平均值的平均值,但我想包括原始平均值计算的权重。我将使用我正在尝试做的精简版本。

所以假设我有下表

Product     date        RunInterval    AvgDuration_secs   Executions
--------------------------------------------------------------------
   A        29/12/19            1               1           100
   A        29/12/19            2               2            10

我想知道的是产品 A 在 29/12 的平均持续时间。到目前为止,我尝试过的所有事情都给了我 1.5 秒的平均值,即它将 1 秒和 2 秒的持续时间 (3) 相加并除以行数 (2) 得到 1.5。我想要得到的是平均值,但考虑到它运行的频率是多少,所以 (100*1) + (10*2) / 110 = 1.09 秒。我已经尝试了 GROUP BY 语句和 CURSORS 的各种尝试,但没有到达那里。

我显然是以错误的方式处理它!欢迎任何帮助:-)

标签: sqlsql-servertsql

解决方案


你可以这样做:

select product, date,
  round(1.0 * sum([Executions] * [AvgDuration_secs]) / sum([Executions]), 2) result
from tablename
group by product, date

我不确定你是想要RunInterval还是AvgDuration_secs第一笔。
请参阅演示
结果:

> product | date      | result        
> :------ | :---------| :-----
> A       | 29/12/2019| 1.09

推荐阅读