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
Một cách viết khác, trông hợp lý hơn, nhưng có thể chậm hơn (bạn phải kiểm tra) là:
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
Với hàng chục triệu hàng, mọi truy vấn đôi khi phát triển chậm, nhưng với các chỉ mục phù hợp, điều này diễn ra nhanh như không. Tôi nghĩ về cơ bản bạn cần một chỉ mục trên Paychecks.EpriseeID và Paychecks.AmountPaid kết hợp. Và chỉ mục trên Employee.ID có thể hữu ích.
Nếu sự tham gia cuối cùng giết chết bạn, bạn có thể thực hiện hai truy vấn. Cái đầu tiên chỉ sử dụng phiếu lương để nhóm chúng theo EmployeeID và sắp xếp chúng theo số tiền tối đa (PaycheckAmount) và cái thứ hai có thể được sử dụng để tìm nạp tên cho từng ID. Đôi khi việc tham gia tốn kém hiệu suất hơn mức bạn muốn và khi bạn nhận được 10 triệu tiền lương cho 500 nhân viên, có thể nhanh hơn nếu thực hiện theo hai bước, mặc dù điều đó có nghĩa là họ đã làm việc tại công ty được khoảng 1600 năm. .;-)