Как построить этот запрос в T-SQL - PullRequest
1 голос
/ 26 августа 2009

У меня есть таблица:

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 содержит среднее значение столбца A для верхних 30 строк таблицы, отсортированных по возрастанию идентификатора, B содержит среднее значение столбца B для верхних 30 строк таблицы, отсортированных по возрастанию идентификатора и т. Д.

Если в таблице меньше 30 строк, то по-прежнему принимается среднее значение, но среднее по всем строкам.

Ответы [ 3 ]

6 голосов
/ 26 августа 2009

Сначала выберите 30 строк, выберите из них, чтобы получить средние значения:

select avg(A), avg(B), avg(C), avg(D)
from (
   select top 30 A, B, C, D
   from TheTable
   order by ID
) x
3 голосов
/ 26 августа 2009

Попробуйте это:

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)
0 голосов
/ 26 августа 2009

Я не собираюсь выполнять весь запрос (что-то вроде select top 30 avg (a), avg (b) и т. Д.) Должно работать, но, чтобы позаботиться о порядке, возможно, проще всего убедиться, что ваш ID столбец является кластеризованным индексом, который обеспечит ваш порядок.

Кластерный индекс, безусловно, является ценным ресурсом, и вам нужно оценить, нужен ли он где-то еще.

*** игнорируйте мой «ответ», это неверно (см. Комментарии ниже)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...