如何在T-SQL中构造此查询

时间:2009-08-25 20:41:32

标签: sql tsql

我有一张桌子:

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行,则仍然取平均值,但平均值不超过行数。

3 个答案:

答案 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是一个聚集索引,可以确保您的订购。

聚集索引当然是一种宝贵的资源,您需要在其他地方评估是否需要它。

***忽略我的“回答”,这是不正确的(见下面的评论)