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
Lepaskan: 2025-01-08 07:47:09
asal
828 orang telah melayarinya

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>
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan