Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thứ tự kết quả MySQL được đặt theo giá trị MAX () của bảng khác

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. .;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thuật toán tạo một số ngẫu nhiên

  2. Cách nhập và xuất tệp CSV bằng PHP và MySQL

  3. Kiểm tra xem có tồn tại không, nếu có, hãy cập nhật bằng 1 ++, nếu không chèn

  4. Tên bảng động trong hàm thủ tục được lưu trữ

  5. Sử dụng JDeveloper với Cơ sở dữ liệu MySQL và Cơ sở dữ liệu Oracle trên AWS RDS, Phần 3