Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich den Durchschnittswert für alle X Zeilen in SQL

Abhängig von Ihrem DBMS funktioniert so etwas:

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;

Dadurch werden 5 Gruppen oder Chunks erstellt, egal wie viele Zeilen vorhanden sind, wie Sie es angefordert haben.

Wenn Sie keine Fensterfunktionen haben, können Sie es vortäuschen:

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

Ich habe hier einige Annahmen getroffen, z. B. Id beginnend mit 1 und ohne Lücken, und dass Sie die letzte Gruppe zu klein statt zu groß wollen würden, wenn sich die Dinge nicht gleichmäßig aufteilen würden. Ich bin auch davon ausgegangen, dass eine Ganzzahldivision wie in MS SQL Server resultieren würde.