Rumah >pangkalan data >tutorial mysql >Mengapakah MySQL GROUP BY Clause Menghasilkan Keputusan Yang Tidak Dijangka Tanpa Fungsi Agregat?

Mengapakah MySQL GROUP BY Clause Menghasilkan Keputusan Yang Tidak Dijangka Tanpa Fungsi Agregat?

DDD
DDDasal
2025-01-08 07:47:09829semak imbas

Why Does MySQL's GROUP BY Clause Produce Unexpected Results Without Aggregate Functions?

Klausa GROUP BY MySQL: Keputusan Tidak Dijangka Tanpa Fungsi Agregat

Klausa GROUP BY dalam SQL adalah penting untuk pengagregatan data. Walau bagaimanapun, kelakuannya apabila digunakan tanpa fungsi agregat (seperti SUM, AVG, COUNT, dll.) dalam pernyataan SELECT boleh berlawanan dengan intuisi, terutamanya dalam MySQL.

Mari kita gambarkan ini dengan contoh. Pertimbangkan jadual emp dengan data pekerja:

name dept salary
Jack a 2
Jill a 1
Tom b 2
Fred b 1

Pertanyaan berikut:

<code class="language-sql">SELECT * FROM emp GROUP BY dept;</code>

mungkin nampaknya membayangkan mendapatkan semula semua jabatan yang berbeza. Walau bagaimanapun, output MySQL selalunya:

name dept salary
Jill a 1
Fred b 1

Mengapa Jill dan Fred, dan bukan Jack dan Tom?

Pengoptimuman GROUP BY MySQL adalah puncanya. Tanpa fungsi agregat, MySQL boleh memilih nilai arbitrari untuk lajur yang tidak disertakan dalam klausa GROUP BY. Pengoptimuman ini mengutamakan kelajuan, dengan mengandaikan (salah dalam kes ini) bahawa lajur bukan berkumpulan adalah konsisten dalam setiap kumpulan.

Perkara penting yang perlu diingat:

  • Keputusan Tidak Tentu: Apabila meninggalkan lajur daripada klausa GROUP BY tanpa fungsi agregat, pilihan nilai MySQL untuk lajur tersebut tidak dapat diramalkan.
  • Keputusan Deterministik (Jarang): Hasilnya hanya dijamin deterministik jika lajur yang ditinggalkan mempunyai nilai yang sama dalam setiap kumpulan. Ini jarang berlaku dalam senario dunia sebenar.
  • ORDER BY Tidak Menjamin Determinisme: Menambah klausa ORDER BY tidak menjadikan keputusan deterministik dalam konteks ini.

Pertanyaan yang kelihatan mudah ini menyerlahkan kepentingan memasukkan secara eksplisit semua lajur tidak teragregat dalam klausa GROUP BY untuk memastikan hasil yang boleh diramal dan boleh dipercayai. Jika tidak, anda berisiko memperoleh data yang tidak konsisten dan berkemungkinan mengelirukan.

Atas ialah kandungan terperinci Mengapakah MySQL GROUP BY Clause Menghasilkan Keputusan Yang Tidak Dijangka Tanpa Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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