Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat ORA-00979 'Bukan KUMPULAN OLEH Ungkapan' dalam Pertanyaan SQL?
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:
Tambahkan lajur yang tiada pada klausa GROUP BY
: Sertakan setiap lajur daripada senarai SELECT
yang tidak diagregatkan dalam klausa GROUP BY
.
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!