Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat ORA-00979 'Bukan KUMPULAN OLEH Ungkapan' dalam Pertanyaan SQL?

Bagaimana untuk Menyelesaikan Ralat ORA-00979 'Bukan KUMPULAN OLEH Ungkapan' dalam Pertanyaan SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-24 04:41:08489semak imbas

How to Resolve the ORA-00979

ORA-00979: Bukan KUMPULAN OLEH Ungkapan

Ralat ORA-00979 menandakan ketidakpadanan antara senarai SELECT pertanyaan SQL anda dan klausa GROUP BY. Ini biasanya berlaku apabila pernyataan SELECT termasuk lajur yang tidak terdapat dalam klausa GROUP BY dan lajur tersebut tidak diagregatkan menggunakan fungsi seperti SUM, AVG, MIN, MAX, COUNT, dll.

Senario:

Pertanyaan anda mungkin melibatkan berbilang jadual (cth., review, cs, fact), dan klausa GROUP BY tidak merangkumi semua lajur tidak terkumpul dalam senarai SELECT. Contohnya:

<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number,  cf.some_other_column  -- Problem: cf.some_other_column is missing from GROUP BY
FROM review cr
JOIN cs ON ...
JOIN fact cf ON ...
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number;</code>

Penyelesaian:

Untuk membetulkannya, sama ada:

  1. Tambahkan lajur yang tiada pada klausa GROUP BY: Sertakan setiap lajur daripada senarai SELECT yang tidak diagregatkan dalam klausa GROUP BY.

  2. Agregat lajur yang tiada: Gunakan fungsi agregat (cth., SUM(cf.some_other_column)) untuk meringkaskan nilai bagi lajur.

Pertimbangan Tambahan:

  • Penyertaan bukan kesamaan: Walaupun semua lajur SELECT berada dalam GROUP BY, ralat boleh timbul dengan gabungan bukan kesamaan (mis., t1.id > t2.id). Ini mencipta baris pendua, melanggar prinsip GROUP BY. Semak syarat penyertaan anda atau gunakan subkueri untuk menghapuskan pendua.

  • Pemahaman GROUP BY: Klausa GROUP BY mengumpulkan baris dengan nilai yang sama dalam lajur yang ditentukan, membenarkan fungsi agregat beroperasi pada setiap kumpulan. Tanpa pengumpulan yang betul, pangkalan data tidak boleh menentukan satu nilai untuk lajur tidak teragregat.

Dengan memastikan bahawa setiap lajur dalam senarai SELECT anda sama ada dalam klausa GROUP BY atau diagregatkan, anda boleh menyelesaikan ralat ORA-00979 dan mendapatkan hasil pertanyaan yang konsisten.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat ORA-00979 'Bukan KUMPULAN OLEH Ungkapan' dalam Pertanyaan SQL?. 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