sql >> Database teknologi >  >> RDS >> Mysql

Få gennemsnitsværdi for hver X række i SQL

Afhængigt af dit DBMS vil noget som dette fungere:

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;

Dette opretter 5 grupper eller bidder, uanset hvor mange rækker der er, som du anmodede om.

Hvis du ikke har nogen vinduesfunktioner, kan du forfalske det:

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

Jeg lavede nogle antagelser her, såsom Id begyndende med 1 og der ikke er nogen huller, og at du vil have den sidste gruppe for lille i stedet for for stor, hvis tingene ikke delte sig ligeligt. Jeg antog også heltalsdeling ville resultere som i Ms SQL Server.



  1. Matrix multiplikation i python og mysql

  2. Hvordan får man en liste over MySQL-visninger?

  3. Guide til designdatabase til blogstyring i MySQL

  4. Sådan får du Postgres Copy til at ignorere første linje i en stor txt-fil