DBMSによっては、次のように機能します。
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;
これにより、要求に応じて、行数に関係なく5つのグループまたはチャンクが作成されます。
ウィンドウ関数がない場合は、偽造できます:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
ここでは、Id
などのいくつかの仮定を行いました。 1から始まり、ギャップはありません。最後のグループは、物事が均等に分割されていない場合は、大きすぎるのではなく小さすぎるようにします。また、MsSQLServerのように整数除算が行われると想定しました。