Abhängig von Ihrem DBMS funktioniert so etwas:
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;
Dadurch werden 5 Gruppen oder Chunks erstellt, egal wie viele Zeilen vorhanden sind, wie Sie es angefordert haben.
Wenn Sie keine Fensterfunktionen haben, können Sie es vortäuschen:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Ich habe hier einige Annahmen getroffen, z. B. Id
beginnend mit 1 und ohne Lücken, und dass Sie die letzte Gruppe zu klein statt zu groß wollen würden, wenn sich die Dinge nicht gleichmäßig aufteilen würden. Ich bin auch davon ausgegangen, dass eine Ganzzahldivision wie in MS SQL Server resultieren würde.