Среднее из каждых X строк, использующих только один выбор в SQL - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть следующая таблица

product | price
------------------
 A      | 10
 B      | 20
 C      | 45
 D      | 47
 E      | 10
 F      | 60
 G      | 15
 H      | 15
 I      | 90

И мне нужно получить что-то вроде (для X = 3):

products  |  avg
------------------
 A        |  25    -- 10+20+45
 D        |  39    -- 47+10+60
 G        |  40    -- 15+15+90

Это нужно сделать, используя только одну команду SELECT!

Возможно ли это сделать? СУБД: MSSQL

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Если вы хотите, чтобы они группировались по 3 на основе имени, вы можете использовать row_number(), чтобы назначить номер, а затем агрегировать:

select min(product), avg(price)
from (select t.*, row_number() over (order by product) as seqnum
      from t
     ) t
group by (seqnum - 1) / 3;  -- SQL Server does integer division
0 голосов
/ 17 сентября 2018

Поскольку вы еще ничего не пробовали, я дам вам общую стратегию, с которой можно начать.

Группировка по номеру строки, деленная на 3 (или x ).Упорядочить номер строки по продукту.

...