Bergantung pada DBMS Anda, sesuatu seperti ini akan berfungsi:
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;
Ini membuat 5 grup atau potongan tidak peduli berapa banyak baris yang ada, seperti yang Anda minta.
Jika Anda tidak memiliki fungsi windowing, Anda dapat memalsukannya:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Saya membuat beberapa asumsi di sini seperti Id
dimulai dengan 1 dan tidak ada celah, dan Anda ingin grup terakhir terlalu kecil daripada terlalu besar jika semuanya tidak terbagi rata. Saya juga berasumsi bahwa pembagian bilangan bulat akan menghasilkan seperti pada Ms SQL Server.