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

Porządkowanie wyniku MySQL ustawionego przez wartość MAX() innej tabeli

select
  p.ID,
  e.NAME
from
  Paychecks p
  inner join Employee e on p.EmployeeID = e.ID
group by
  p.ID
order by
  max(p.AmountPaid) desc

Inny sposób pisania, który wygląda bardziej logicznie, ale może być wolniejszy (trzeba przetestować) to:

select
  e.ID,
  e.NAME
from
  Employee e
  inner join Paychecks p on p.EmployeeID = e.ID
group by
  e.ID
order by
  max(p.AmountPaid) desc

Z dziesiątkami milionów wierszy każde zapytanie czasami rośnie wolno, ale przy odpowiednich indeksach jest to tak szybkie, jak to tylko możliwe. Myślę, że w zasadzie potrzebujesz jednego indeksu na Paychecks.EmployeeID i Paychecks.AmountPaid łącznie. I indeks na Employee.ID może pomóc.

Jeśli złączenie cię w końcu zabija, możesz wykonać dwa zapytania. Pierwszy z nich wykorzystuje tylko czeki do grupowania ich według EmployeeID i porządkowania według max(PaycheckAmount), a drugi może służyć do pobierania nazw dla każdego identyfikatora. Czasami połączenia kosztują więcej wydajności, niż byś chciał, a kiedy masz 10 milionów wypłat dla 500 pracowników, szybciej może być zrobienie tego w dwóch krokach, chociaż będzie to oznaczać, że pracują w firmie średnio około 1600 lat .;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw klucz podstawowy automatycznego przyrostu do istniejącej tabeli

  2. MySQL JOIN zwraca NULL pól

  3. Połącz aws ec2 mysql z moją lokalną aplikacją java

  4. Jak zmienić typ sortowania dla kolumny MySQL?

  5. Jak usunąć rekord MySQL po określonym czasie?