Afhængigt af dit DBMS vil noget som dette fungere:
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;
Dette opretter 5 grupper eller bidder, uanset hvor mange rækker der er, som du anmodede om.
Hvis du ikke har nogen vinduesfunktioner, kan du forfalske det:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Jeg lavede nogle antagelser her, såsom Id
begyndende med 1 og der ikke er nogen huller, og at du vil have den sidste gruppe for lille i stedet for for stor, hvis tingene ikke delte sig ligeligt. Jeg antog også heltalsdeling ville resultere som i Ms SQL Server.