Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir la valeur moyenne pour chaque X lignes en SQL

Selon votre SGBD, quelque chose comme ceci fonctionnera :

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;

Cela crée 5 groupes ou morceaux, quel que soit le nombre de lignes, comme vous l'avez demandé.

Si vous n'avez pas de fonctions de fenêtrage, vous pouvez le simuler :

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

J'ai fait quelques hypothèses ici telles que Id en commençant par 1 et qu'il n'y a pas d'espace, et que vous voudriez que le dernier groupe soit trop petit au lieu d'être trop grand si les choses ne se répartissaient pas uniformément. J'ai également supposé que la division entière se traduirait comme dans Ms SQL Server.