获得前n行的平均值

时间:2014-12-05 20:19:34

标签: sql sql-server sql-server-2008 average mean

我试图设计一个sql查询,该查询可以获取一列结果并返回第一个" n"的平均值/平均值。结果。

换句话说,如果我有一个如下所示的数据样本:

|  Day  | Number of People |
|:-----:|:----------------:|
| 12/01 |         4        |
| 12/02 |         8        |
| 12/03 |         5        |
| 12/04 |         6        |
| 12/05 |         8        |
| 12/06 |         3        |
| 12/07 |         5        |

我想要一个可以导致表格如下的查询:

|  Day  | Number of People |  nMean |
|:-----:|:----------------:|:------:|
| 12/01 |         4        |    4   |
| 12/02 |         8        |    6   |
| 12/03 |         5        | 5.6667 |
| 12/04 |         6        |  5.75  |
| 12/05 |         8        |   6.2  |
| 12/06 |         3        | 5.6667 |
| 12/07 |         5        | 5.5714 |

1 个答案:

答案 0 :(得分:4)

如果您使用窗口功能,您可以拥有一个非常优雅的解决方案 这虽然只适用于SQL Server 2012及更高版本。

SELECT d.[day], 
AVG(d.[num] * 1.0) OVER
(
     ORDER BY d.[day] ASC
     ROWS BETWEEN UNBOUNDED PRECEDING
     AND CURRENT ROW
) AS nMean
FROM [data] d;

这也应该有效(即使在SQL Server 2008中):

select d2.[day], avg(1.0 * d1.num) as nMean
from
data d2 
join data d1 on d2.day >= d1.day
group by d2.[day]
order by d2.[day] asc;