V závislosti na vašem DBMS bude fungovat něco takového:
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;
To vytvoří 5 skupin nebo bloků bez ohledu na počet řádků, jak jste požadovali.
Pokud nemáte žádné funkce oken, můžete to předstírat:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Udělal jsem zde nějaké předpoklady, jako je Id
počínaje 1 a bez mezer a že byste chtěli, aby byla poslední skupina příliš malá místo příliš velká, kdyby se věci nerozdělovaly rovnoměrně. Také jsem předpokládal, že výsledkem bude celočíselné dělení jako v MS SQL Server.