我有一张桌子:
ID A B C D
1 10 20 30 5
2 332 80 32 12
3 41 20 82 42
.
.
.
我想查询给我
A B C D
其中A包含表格前30行的A列平均值,按ID升序排序,B包含表格前30行的B列平均值,按ID升序排序等等。
如果表格的行数少于30行,则仍然取平均值,但平均值不超过行数。
答案 0 :(得分:6)
首先选出30行,从中选择以获得平均值:
select avg(A), avg(B), avg(C), avg(D)
from (
select top 30 A, B, C, D
from TheTable
order by ID
) x
答案 1 :(得分:3)
试试这个:
SELECT AVG (A), AVG(B), AVG(C), AVG(D)
FROM ThisTable tt
WHERE tt.ID IN (SELECT TOP 30 ID FROM ThisTable ORDER BY ID ASC)
答案 2 :(得分:-1)
我不打算做整个查询(比如选择前30个avg(a),avg(b)等)应该可以工作,但是为了处理顺序,确保你的ID可能是最简单的column是一个聚集索引,可以确保您的订购。
聚集索引当然是一种宝贵的资源,您需要在其他地方评估是否需要它。
***忽略我的“回答”,这是不正确的(见下面的评论)