W zależności od systemu DBMS zadziała coś takiego:
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;
Tworzy to 5 grup lub porcji bez względu na liczbę wierszy, zgodnie z życzeniem.
Jeśli nie masz funkcji okienkowych, możesz to sfałszować:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Zrobiłem tutaj pewne założenia, takie jak Id
zaczynając od 1 i nie ma przerw, i że chciałbyś, aby ostatnia grupa była za mała, a nie za duża, gdyby rzeczy nie dzieliły się równo. Założyłem również, że wynik dzielenia liczb całkowitych będzie taki, jak w przypadku SQL Server.