Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni il valore medio per ogni X righe in SQL

A seconda del tuo DBMS, qualcosa del genere funzionerà:

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;

Questo crea 5 gruppi o blocchi, non importa quante righe ci sono, come hai richiesto.

Se non hai funzioni di windowing puoi fingere:

SELECT
   ChunkStart = Min(Id),
   ChunkEnd = Max(Id),
   Value = Avg(Value)
FROM
   YourTable
GROUP BY
   (Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;

Ho fatto alcune ipotesi qui come Id iniziando con 1 e non ci sono spazi vuoti, e che vorresti che l'ultimo gruppo fosse troppo piccolo invece che troppo grande se le cose non fossero divise equamente. Ho anche ipotizzato che la divisione di interi risulterebbe come in Ms SQL Server.