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

Truy vấn Giới hạn MySQL, Nhóm và AVG

Phản ứng ban đầu của tôi là sử dụng LIMIT để giới hạn mức trung bình ở 5 kết quả, điều này khiến tôi đề xuất:

select a.host, avg(a.execution_time) from (select id, execution_time, host from jobs order by id desc limit 5) a group by a.host;

Nhưng rõ ràng là điều này giới hạn mức trung bình cho 5 công việc gần đây nhất chứ không phải 5 công việc gần đây nhất trên mỗi máy chủ.

Có vẻ như khó sử dụng LIMIT để hạn chế mức trung bình mà không sử dụng một số loại thủ tục được lưu trữ. Điều này khiến tôi phải cân nhắc việc chỉ định mỗi công việc một thứ tự hoàn thành cho mỗi máy chủ lưu trữ hoặc vị trí, bằng cách sử dụng biến mysql.

Điều này chưa được kiểm chứng, nhưng lý thuyết mà nó minh họa phải là một điểm khởi đầu tốt:

Đầu tiên, chúng ta nên chỉ định mỗi công việc một vị trí dựa trên máy chủ của nó:

select
  host, 
  execution_time,
  @current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
  @current_host := host
from
  (select @current_host := null, @current_pos := 0) set_pos,
  jobs
order by
  host,
  id desc;

Sau khi thiết lập vị trí, chỉ cần chọn chức năng tổng hợp, giới hạn kết quả ở 5 vị trí hàng đầu:

select
  jt.host,
  avg(jt.execution_time)
from
  (
  select
    host, 
    execution_time,
    @current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
    @current_host := host
  from
    (select @current_host := null, @current_pos := 0) set_pos,
    jobs
  order by
    host,
    id desc
  ) jt
where
  jt.position <= 5
group
  by host;

Vui lòng cho tôi biết nếu điều này phù hợp với bạn, hoặc nếu có nhiều khía cạnh khác mà tôi chưa xem xét. Đây là một vấn đề hấp dẫn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy xuất các nhóm từ nhiều bảng đến nhiều

  2. Cách sử dụng php đếm các cặp từ (chuỗi) mảng chèn vào MySQL

  3. Truy cập vào trình kích hoạt mysql db từ xa

  4. Không thể kết nối với máy chủ Mysql; Không thể tạo / ghi tệp pid

  5. Cách tốt nhất để lưu trữ Giá trị hộp kiểm trong Cơ sở dữ liệu MySQL là gì?