sql >> Base de Datos >  >> RDS >> Mysql

Obtenga el valor promedio para cada fila X en SQL

Dependiendo de su DBMS, algo como esto 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;

Esto crea 5 grupos o fragmentos sin importar cuántas filas haya, como solicitó.

Si no tiene funciones de ventana, puede falsificarlo:

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

Hice algunas suposiciones aquí, como Id comenzando con 1 y sin espacios, y que desearía que el último grupo fuera demasiado pequeño en lugar de demasiado grande si las cosas no se dividieran de manera uniforme. También supuse que la división de enteros daría como resultado Ms SQL Server.