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

Limit, grupa i zapytanie AVG MySQL

Moją pierwszą reakcją było użycie LIMIT, aby ograniczyć średnią do 5 wyników, co skłoniło mnie do zasugerowania:

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;

Ale jasne jest, że ogranicza to średnią do ostatnich 5 zadań, a nie ostatnich 5 zadań na hosta.

Wydaje się, że trudno jest użyć LIMIT do ograniczenia średniej bez użycia jakiejś procedury składowanej. To skłoniło mnie do rozważenia przypisania każdemu zadaniu kolejności ukończenia na host lub pozycji za pomocą zmiennej mysql.

Nie jest to testowane, ale teoria, którą ilustruje, powinna być dobrym punktem wyjścia:

Najpierw powinniśmy przypisać każdej pracy stanowisko w oparciu o hosta:

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;

Po ustaleniu pozycji wystarczy wybrać funkcję agregującą, ograniczającą wyniki do 5 najwyższych pozycji:

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;

Daj mi znać, czy to działa dla Ciebie, czy jest więcej aspektów, których nie brałem pod uwagę. To intrygujący problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nie mogę zainstalować MySQL-Python

  2. sql DROP CONSTRAINT UNIQUE nie działa

  3. Mysql errno 150 próbuje utworzyć tabelę z odniesieniami do kluczy obcych

  4. jak wywołać procedurę składowaną MySQL w wiosennym rozruchu przy użyciu hibernacji?

  5. Java-Mysql - Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK)