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

mysql:pilih max(score) tidak mengembalikan data baris yang relevan

Anda menggunakan MAX , yang merupakan fungsi agregat. Fungsi agregat memiliki efek memperlakukan beberapa baris dalam tabel sebagai grup. Jika Anda tidak melakukan sesuatu yang istimewa, semua baris di seluruh tabel akan digunakan sebagai satu grup besar, dan ketika fungsi agregat seperti MAX jika ada, semua baris ini akan diringkas menjadi hanya satu baris agregat. Efek kondensasi itu akan terjadi juga untuk fungsi agregat lainnya seperti MIN , SUM , GROUP_CONCAT dan teman-teman (lihat:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Anda juga dapat menerapkan pengelompokan tertentu menggunakan GROUP BY konstruksi, tetapi jika Anda tidak, kemunculan fungsi agregat hanya akan menggabungkan semua baris menjadi satu baris (tetapi pengelompokan ini terjadi setelah menerapkan WHERE kondisi, jadi hanya baris yang difilter yang digabungkan)

Sekarang, karena efek kondensasi atau 'pengurangan' dari fungsi agregat ini, ada beberapa cara untuk membuat satu nilai dari banyak nilai. Untuk MAX , cara itu adalah dengan mencantumkan hanya nilai maksimum yang ditemukan untuk semua contoh ekspresi yang Anda berikan sebagai argumen ke MAX . Tetapi kolom Anda yang lain tidak memiliki fungsi agregat seperti itu. Untuk sebagian besar produk database, kemunculan kolom yang tidak teragregasi maupun yang teragregasi di SELECT daftar akan menjadi kesalahan. Tetapi MySQL berperilaku salah/berbeda dan hanya mengembalikan salah satu nilai yang tersedia untuk setiap ekspresi non-agregat yang tercantum dalam SELECT sedikit. Nilai mana yang sesuai dengan mysql - Anda tidak dapat mengandalkan algoritme tertentu.

Dalam banyak kasus, orang ingin melakukan sesuatu dengan "baris apa pun yang memiliki nilai maksimum", dengan kata lain, menemukan baris yang memiliki nilai nilai maksimum, tetapi menggunakan kolom lain dari baris itu tanpa teragregasi. Solusi yang disediakan oleh middaparka melakukan itu, dan ada cara lain untuk mencapainya juga (maksimum google untuk MySQL group-bijaksana). Untuk informasi lebih umum tentang fungsi agregat dan GROUP BY terkait klausa, Anda bisa melihat -shameless selfplug- artikel saya di sini:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan bacaan phantom?

  2. Tingkatkan MySQL ke MariaDB 10 (Bagian 1 – Instal MariaDB 5.5)

  3. Mysql pilih rekursif dapatkan semua anak dengan beberapa level

  4. SQL - cetak banyak kata di antara setiap kolom dengan banyak kondisi

  5. MySQL Pilih kueri untuk mengambil basis data berdasarkan nilai daftar