Perlakuan Unik MySQL terhadap Fungsi Agregat tanpa KUMPULAN OLEH
Dalam MySQL, tidak seperti sistem pengurusan pangkalan data hubungan lain, adalah mungkin untuk menggunakan fungsi agregat dalam senarai PILIH tanpa menyatakan klausa GROUP BY. Tingkah laku ini telah menimbulkan persoalan dalam kalangan pembangun yang biasa dengan platform DBMS yang lebih ketat.
Rasional MySQL
MySQL membenarkan fleksibiliti ini melalui reka bentuk, menganggapnya sebagai lanjutan yang berharga kepada SQL standard. Apabila fungsi agregat digunakan tanpa ketiadaan GROUP BY, hasil yang dikembalikan mewakili satu baris yang mengandungi nilai agregat yang dikira pada keseluruhan jadual. Ini boleh berguna dalam senario di mana maklumat ringkasan dikehendaki tanpa memerlukan pengumpulan.
Contoh
Sebagai contoh, pertimbangkan pertanyaan:
SELECT col1, col2, SUM(col3) FROM tbl1;
Tanpa GROUP BY, MySQL mentafsir ini sebagai satu kumpulan dan menyediakan output berikut:
col1 col2 SUM(col3) ------------------------- (First row value of col1) (First row value of col2) (Sum of all col3 values)
Penghadan dengan ONLY_FULL_GROUP_BY
Pendekatan lembut MySQL untuk mengendalikan agregat fungsi tanpa GROUP BY telah diperkenalkan dengan ONLY_FULL_GROUP_BY ditetapkan kepada OFF. Dengan keluaran MySQL versi 5.7.5, ONLY_FULL_GROUP_BY didayakan secara lalai, yang menyekat tingkah laku ini.
Mendayakan ONLY_FULL_GROUP_BY memastikan fungsi agregat hanya boleh digunakan bersama dengan klausa GROUP BY, mengakibatkan ralat jika pertanyaan tanpa ia ditemui. Perubahan ini sejajar dengan standard SQL dan menggalakkan ketekalan data.
Atas ialah kandungan terperinci Mengapa Saya Boleh Menggunakan Fungsi Agregat Tanpa GROUP BY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!