Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha o valor médio para cada X linhas no SQL


Dependendo do seu DBMS, algo assim funcionará:
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;

Isso cria 5 grupos ou blocos, não importa quantas linhas existam, conforme solicitado.

Se você não tem funções de janela, você pode fingir:
SELECT
   ChunkStart = Min(Id),
   ChunkEnd = Max(Id),
   Value = Avg(Value)
FROM
   YourTable
GROUP BY
   (Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;

Eu fiz algumas suposições aqui, como Id começando com 1 e não havendo lacunas, e que você gostaria que o último grupo fosse muito pequeno em vez de muito grande se as coisas não se dividissem uniformemente. Eu também assumi que a divisão de inteiros resultaria como no Ms SQL Server.