Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Memesan hasil MySQL yang ditetapkan oleh nilai MAX() dari tabel lain

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

Cara penulisan yang berbeda, yang terlihat lebih logis, tetapi mungkin lebih lambat (Anda harus mengujinya) adalah:

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

Dengan puluhan juta baris, setiap kueri terkadang tumbuh lambat, tetapi dengan indeks yang tepat, ini secepat yang didapat. Saya pikir Anda pada dasarnya membutuhkan satu indeks di Paychecks.EmployeeID dan Paychecks.AmountPaid digabungkan. Dan indeks pada Employee.ID dapat membantu.

Jika bergabung pada akhirnya membunuh Anda, Anda dapat menjalankan dua kueri. Yang pertama hanya menggunakan cek gaji untuk mengelompokkannya berdasarkan EmployeeID dan mengurutkannya berdasarkan max(PaycheckAmount), dan yang kedua dapat digunakan untuk mengambil nama untuk setiap ID. Terkadang bergabung membutuhkan kinerja yang lebih tinggi daripada yang Anda inginkan, dan ketika Anda mendapatkan 10 juta gaji untuk 500 karyawan, mungkin lebih cepat melakukannya dalam dua langkah, meskipun itu berarti mereka telah bekerja di perusahaan selama rata-rata 1600 tahun. .;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa baris yang terpengaruh mengembalikan 0 saat memperbarui/menghapus berhasil?

  2. Apakah mysql_real_escape_string() dan mysql_escape_string() cukup untuk keamanan aplikasi?

  3. Bagaimana cara membuat permintaan balasan komentar di MYSQL?

  4. Cara yang benar untuk membersihkan input di MySQL menggunakan PDO

  5. Duplikasi transaksi PDO PHP