Dependendo do seu DBMS, algo assim funcionará:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
(
SELECT
Chunk = NTILE(5) OVER (ORDER BY Id),
*
FROM
YourTable
) AS T
GROUP BY
Chunk
ORDER BY
ChunkStart;
Isso cria 5 grupos ou blocos, não importa quantas linhas existam, conforme solicitado.
Se você não tem funções de janela, você pode fingir:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Eu fiz algumas suposições aqui, como
Id
começando com 1 e não havendo lacunas, e que você gostaria que o último grupo fosse muito pequeno em vez de muito grande se as coisas não se dividissem uniformemente. Eu também assumi que a divisão de inteiros resultaria como no Ms SQL Server.