Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận giá trị trung bình cho mỗi hàng X trong SQL

Tùy thuộc vào DBMS của bạn, một cái gì đó như thế này sẽ hoạt động:

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;

Điều này tạo ra 5 nhóm hoặc nhóm bất kể có bao nhiêu hàng, như bạn yêu cầu.

Nếu bạn không có chức năng cửa sổ, bạn có thể giả mạo nó:

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

Tôi đã đưa ra một số giả định ở đây, chẳng hạn như Id bắt đầu bằng 1 và không có khoảng trống, và bạn sẽ muốn nhóm cuối cùng quá nhỏ thay vì quá lớn nếu mọi thứ không chia đều. Tôi cũng giả định rằng phép chia số nguyên sẽ dẫn đến kết quả trong 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. Chuyển đổi dấu thời gian VARCHAR thành TIMESTAMP?

  2. cách chọn n hàng

  3. python mysqldb xóa hàng

  4. Xác định mối quan hệ - nhiều đến nhiều

  5. MySQL Chèn ngày Gson