sql >> Database >  >> RDS >> Mysql

Krijg de gemiddelde waarde voor elke X-rij in SQL

Afhankelijk van uw DBMS, zal zoiets als dit werken:

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;

Dit creëert 5 groepen of chunks, ongeacht hoeveel rijen er zijn, zoals je hebt gevraagd.

Als je geen vensterfuncties hebt, kun je het vervalsen:

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

Ik heb hier enkele aannames gedaan, zoals Id beginnend met 1 en er zijn geen gaten, en dat je de laatste groep te klein zou willen in plaats van te groot als de dingen niet gelijk verdeeld zouden zijn. Ik nam ook aan dat deling op gehele getallen zou resulteren zoals in Ms SQL Server.



  1. IDENTITY() vs IDENTITY() in SQL Server:wat is het verschil?

  2. Waarom zou ik niet al mijn PL/SQL-only VARCHAR2 32767 bytes maken?

  3. Ontdek aan welke partitie een bepaalde waarde zou worden toegewezen in SQL Server (T-SQL)

  4. Ontdek hoe kardinaliteit de prestaties beïnvloedt