sql >> Databasteknik >  >> RDS >> Mysql

Få medelvärde för varje X-rad i SQL

Beroende på din DBMS kommer något liknande detta att fungera:

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;

Detta skapar 5 grupper eller bitar oavsett hur många rader det finns, som du begärde.

Om du inte har några fönsterfunktioner kan du fejka det:

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

Jag gjorde några antaganden här som Id börjar med 1 och det inte finns några luckor, och att du skulle vilja ha den sista gruppen för liten istället för för stor om saker och ting inte delas jämnt. Jag antog också heltalsdelning skulle resultera som i Ms SQL Server.



  1. Ansluter till PostgreSQL-databas genom SSH-tunnling i Python

  2. Hur bestämmer man språket (engelska, kinesiska...) för en given sträng i Oracle?

  3. Ansluter till mysql i xampp utan lösenord

  4. <textarea> och MYSQL för att visa data i php