A seconda del tuo DBMS, qualcosa del genere funzionerà:
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;
Questo crea 5 gruppi o blocchi, non importa quante righe ci sono, come hai richiesto.
Se non hai funzioni di windowing puoi fingere:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Ho fatto alcune ipotesi qui come Id
iniziando con 1 e non ci sono spazi vuoti, e che vorresti che l'ultimo gruppo fosse troppo piccolo invece che troppo grande se le cose non fossero divise equamente. Ho anche ipotizzato che la divisione di interi risulterebbe come in Ms SQL Server.