我试图设计一个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 |
答案 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;