Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Batas MySQL, Grup, dan Kueri AVG

Reaksi awal saya adalah menggunakan LIMIT untuk membatasi rata-rata menjadi 5 hasil, yang membuat saya menyarankan:

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;

Namun jelas bahwa ini membatasi rata-rata untuk 5 pekerjaan terbaru, dan bukan 5 pekerjaan terbaru per host.

Tampaknya sulit menggunakan LIMIT untuk membatasi rata-rata, tanpa menggunakan semacam prosedur tersimpan. Hal ini membuat saya mempertimbangkan untuk menetapkan setiap pekerjaan urutan penyelesaian per-host, atau posisi, menggunakan variabel mysql.

Ini belum teruji, tetapi teori yang diilustrasikan harus menjadi titik awal yang baik:

Pertama, kita harus menetapkan posisi masing-masing pekerjaan berdasarkan host-nya:

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;

Setelah menetapkan posisi, cukup pilih fungsi agregat, batasi hasil ke 5 posisi teratas:

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;

Tolong beri tahu saya jika ini berhasil untuk Anda, atau jika ada lebih banyak aspek yang belum saya pertimbangkan. Ini adalah masalah yang menarik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. USIA [1, 2, 3] vs. USIA ANTARA 1 DAN 3

  2. PHP PDO:rangkaian karakter, setel nama?

  3. Hasil N Terbaik MySQL dengan Tabel Gabung

  4. Gunakan subquery yang berkorelasi pada dua kolom

  5. Menyimpan gambar di MySQL dari Java