Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj średnią wartość dla każdego X wierszy w SQL

W zależności od systemu DBMS zadziała coś takiego:

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;

Tworzy to 5 grup lub porcji bez względu na liczbę wierszy, zgodnie z życzeniem.

Jeśli nie masz funkcji okienkowych, możesz to sfałszować:

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

Zrobiłem tutaj pewne założenia, takie jak Id zaczynając od 1 i nie ma przerw, i że chciałbyś, aby ostatnia grupa była za mała, a nie za duża, gdyby rzeczy nie dzieliły się równo. Założyłem również, że wynik dzielenia liczb całkowitych będzie taki, jak w przypadku SQL Server.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz wiersze z jednej tabeli, połącz ostatni wiersz z innej tabeli w relacji jeden-do-wielu

  2. Wydajność MySQL:MySQL kontra MariaDB

  3. Jak obliczyć, czy wiek mieści się w zakresie od roku urodzenia, podczas pobierania roku urodzenia z Db w Django ORM

  4. Jak zrobić klucz podstawowy szeregowo?

  5. Jak połączyć podobne tagi w pliku XML