Rumah > pangkalan data > tutorial mysql > Bagaimanakah MySQL Mengendalikan Lajur Bukan Agregat dalam Klausa GROUP BY?

Bagaimanakah MySQL Mengendalikan Lajur Bukan Agregat dalam Klausa GROUP BY?

Barbara Streisand
Lepaskan: 2024-12-09 21:08:18
asal
425 orang telah melayarinya

How Does MySQL Handle Non-Aggregated Columns in GROUP BY Clauses?

Lajur Bukan Agregat dalam MySQL GROUP BY: A Deviation from Standard

Pelaksanaan MySQL GROUP BY membenarkan kemasukan lajur bukan agregat dalam senarai SELECT, walaupun apabila ia tidak termasuk dalam kriteria pengelompokan. Tingkah laku ini berbeza daripada standard ANSI SQL, yang melarang pemilihan lajur bukan berkumpulan dalam pertanyaan sedemikian.

Percanggahan ini timbul daripada konsep kebergantungan berfungsi. Dalam MySQL, jika lajur tidak terkumpul bergantung pada lajur pengelompokan, MySQL secara senyap memilih dan mengembalikan nilai tunggal untuk lajur itu. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pertanyaan sedemikian boleh membawa kepada hasil yang tidak jelas jika kebergantungan fungsi tidak dikuatkuasakan.

Sebagai contoh, pertanyaan berikut akan menjadi tidak sah dalam ANSI SQL:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;
Salin selepas log masuk

Dalam MySQL, pertanyaan ini dibenarkan kerana persons.col4 secara fungsional bergantung pada table1.personID melalui gabungan. Walau bagaimanapun, jika berbilang orang mempunyai ID orang yang sama, keputusan untuk persons.col4 boleh menjadi sewenang-wenangnya.

Untuk mengelakkan kekaburan sedemikian, MySQL menyediakan mod SQL ONLY_FULL_GROUP_BY SQL, yang menguatkuasakan peraturan pengelompokan yang lebih ketat selaras dengan piawaian ANSI. Secara lalai, mod ini tidak didayakan, tetapi ia boleh diaktifkan untuk memastikan pertanyaan mematuhi gelagat standard.

Perhatikan bahawa SQLite juga membenarkan lajur tidak teragregat dalam pertanyaan GROUP BY, tetapi ia memilih nilai terakhir dalam kumpulan bukannya sewenang-wenangnya. Tingkah laku ini tidak boleh dipercayai, kerana ia mungkin berubah dalam versi akan datang. Untuk mengelakkan kekaburan, adalah disyorkan untuk menulis semula pertanyaan supaya tidak jelas dan menentukan.

Atas ialah kandungan terperinci Bagaimanakah MySQL Mengendalikan Lajur Bukan Agregat dalam Klausa GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan