Tùy thuộc vào DBMS của bạn, một cái gì đó như thế này sẽ hoạt động:
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;
Điều này tạo ra 5 nhóm hoặc nhóm bất kể có bao nhiêu hàng, như bạn yêu cầu.
Nếu bạn không có chức năng cửa sổ, bạn có thể giả mạo nó:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
Tôi đã đưa ra một số giả định ở đây, chẳng hạn như Id
bắt đầu bằng 1 và không có khoảng trống, và bạn sẽ muốn nhóm cuối cùng quá nhỏ thay vì quá lớn nếu mọi thứ không chia đều. Tôi cũng giả định rằng phép chia số nguyên sẽ dẫn đến kết quả trong Ms SQL Server.