Mysql
 sql >> база данни >  >> RDS >> Mysql

Вземете средна стойност за всеки X реда в SQL

В зависимост от вашата СУБД нещо подобно ще работи:

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;

Това създава 5 групи или части, независимо колко реда има, както сте поискали.

Ако нямате функции за прозорци, можете да го фалшифицирате:

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

Направих някои предположения тук като Id започвайки с 1 и да няма пропуски и че бихте искали последната група да е твърде малка, вместо твърде голяма, ако нещата не се разделят равномерно. Освен това предположих, че целочисленото деление ще доведе като в Ms 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. mysql избира отделни редове в колона със списъци, разделени със запетая

  2. Как търсенето в Gmail е толкова бързо?

  3. yii релация за множество външни ключове в колона

  4. Вмъкнете конкретен идентификатор в автоматично увеличено поле в MySQL с Entity Framework 5

  5. Възможни ли са множество външни ключове в едно поле?