sql >> Databáze >  >> RDS >> Mysql

Získejte průměrnou hodnotu pro každý X řádků v SQL

V závislosti na vašem DBMS bude fungovat něco takového:

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;

To vytvoří 5 skupin nebo bloků bez ohledu na počet řádků, jak jste požadovali.

Pokud nemáte žádné funkce oken, můžete to předstírat:

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

Udělal jsem zde nějaké předpoklady, jako je Id počínaje 1 a bez mezer a že byste chtěli, aby byla poslední skupina příliš malá místo příliš velká, kdyby se věci nerozdělovaly rovnoměrně. Také jsem předpokládal, že výsledkem bude celočíselné dělení jako v MS SQL Server.



  1. Jaký je nejlepší způsob přístupu k databázi z PHP?

  2. Jaký je dopad změny délky varchar v mysql?

  3. Vylepšení dotazu pomocí velkého množství vnitřních spojení s tabulkou klíč/hodnota wp_postmeta

  4. Proměnná PHP a dotaz LIKE MySQL nefungují