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

Berikan prioritas pada ORDER BY daripada GROUP BY di MySQL tanpa subquery

Menurut definisi, ORDER BY diproses setelah pengelompokan dengan GROUP BY. Menurut definisi, cara konseptual setiap pernyataan SELECT diproses adalah:

  1. Hitung produk kartesius dari semua tabel yang dirujuk dalam klausa FROM
  2. Terapkan kriteria bergabung dari klausa FROM untuk memfilter hasil
  3. Terapkan kriteria filter dalam klausa WHERE untuk memfilter hasil lebih lanjut
  4. Kelompokkan hasil ke dalam himpunan bagian berdasarkan klausa GROUP BY, ciutkan hasil menjadi satu baris untuk setiap himpunan bagian tersebut dan hitung nilai fungsi agregat apa pun -- SUM() , MAX() , AVG() , dll. -- untuk setiap subset tersebut. Perhatikan bahwa jika tidak ada klausa GROUP BY yang ditentukan, hasilnya akan diperlakukan seolah-olah ada subset tunggal dan fungsi agregat apa pun berlaku untuk seluruh set hasil, menciutkannya menjadi satu baris.
  5. Filter hasil yang sekarang dikelompokkan berdasarkan klausa HAVING.
  6. Urutkan hasil berdasarkan klausa ORDER BY.

Satu-satunya kolom yang diizinkan dalam kumpulan hasil SELECT dengan klausa GROUP BY, tentu saja,

  • Kolom yang dirujuk dalam klausa GROUP BY
  • Fungsi agregat (seperti MAX() )
  • literal/konstanta
  • ekspresi yang diturunkan dari salah satu di atas.

Hanya implementasi SQL yang rusak yang memungkinkan hal-hal seperti select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy — referensi ke kolom a, b dan c tidak berarti/tidak terdefinisi, mengingat bahwa grup individu telah diciutkan menjadi satu baris,



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Contoh transaksi PHP + MySQL

  2. tidak dapat mengubah tabel, Tabel 'xxx/#sql-ib265' sudah ada

  3. Alternatif NOT IN Di MySQL

  4. Kehilangan koneksi ke MySQL setelah beberapa saat, dan tidak terhubung kembali

  5. Perbarui/Tambahkan satu kolom pada beberapa baris sekaligus