Mysql
 sql >> база данни >  >> RDS >> Mysql

Поръчване на MySQL резултат, зададен от MAX() стойност на друга таблица

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

Различен начин на писане, който изглежда по-логичен, но може да е по-бавен (трябва да тествате) е:

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

С десетки милиони редове всяка заявка понякога нараства бавно, но с подходящите индекси това е толкова бързо, колкото става. Мисля, че основно се нуждаете от един индекс на Paychecks.EmployeeID и Paychecks.AmountPaid, комбинирани. И индексът на Employee.ID може да помогне.

Ако присъединяването ви убива в крайна сметка, можете да изпълните две заявки. Първият използва само чековете за заплати, за да ги групира по EmployeeID и да ги подреди по max(PaycheckAmount), а вторият може да се използва за извличане на имената за всеки ID. Понякога присъединяванията струват повече производителност, отколкото бихте искали, и когато получите 10 милиона заплати за 500 служители, може да е по-бързо да го направите в две стъпки, въпреки че това ще означава, че те работят в компанията средно от около 1600 години .;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да считате NULL като MAX дата, вместо да я игнорирате в MySQL?

  2. MySQL, копирането на файлове с таблици води до ГРЕШКА 1017 (HY000):Не мога да намеря файл:въпреки че е там

  3. Защита на MySQL сървър

  4. Как да получите разликата между последователни редове в MySQL?

  5. В Django, как да избера 100 произволни записа от базата данни?