Rumah > pangkalan data > tutorial mysql > Mengapa Pertanyaan SQL Saya Menghasilkan Ralat ORA-00979, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Pertanyaan SQL Saya Menghasilkan Ralat ORA-00979, dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Lepaskan: 2025-01-24 04:47:10
asal
333 orang telah melayarinya

Why Does My SQL Query Result in an ORA-00979 Error, and How Can I Fix It?

Menyelesaikan masalah ORA-00979: SQL GROUP BY Common Isu

Ralat ORA-00979 yang digeruni sering muncul apabila menggunakan klausa GROUP BY SQL. Ralat ini menandakan ketidakpadanan antara lajur yang dipilih dan yang dikumpulkan. Khususnya, ia timbul apabila penyataan SELECT termasuk lajur yang tidak terdapat dalam klausa GROUP BY atau apabila fungsi bukan agregat digunakan pada lajur tidak terkumpul.

Mari kita periksa pertanyaan yang bermasalah:

<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name,
tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",
cs.cs_id, cr.tracking_number
FROM review cr, cs, fact cf
WHERE cr.cs_sk = cs.cs_sk
AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%'
AND row_delete_date_time IS NULL
AND cr.review_sk = cf.review_wk(+)
AND cr.fact_type_code (+) = 183050
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number
ORDER BY cs.cs_id, cr.full_name;</code>
Salin selepas log masuk

Pertanyaan ini mencetuskan ORA-00979 kerana klausa GROUP BY tidak lengkap. Untuk membetulkannya, sama ada masukkan semua lajur bukan agregat daripada senarai SELECT dalam klausa GROUP BY atau gunakan fungsi agregat (seperti COUNT, SUM, MIN, MAX, AVG) kepada lajur yang tidak dihimpunkan secara eksplisit.

Berikut ialah versi yang diperbetulkan:

<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name,
to_char(cf.fact_date, 'mm/dd/yyyy') "appt",
cs.cs_id, cr.tracking_number
FROM review cr, cs, fact cf
WHERE cr.cs_sk = cs.cs_sk
AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%'
AND row_delete_date_time IS NULL
AND cr.review_sk = cf.review_wk(+)
AND cr.fact_type_code (+) = 183050
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cr.full_name, cs.cs_id
ORDER BY cs.cs_id, cr.full_name;</code>
Salin selepas log masuk

Perubahan utama ialah menambah cr.full_name dan cs.cs_id pada klausa GROUP BY. Sebagai alternatif, jika anda hanya memerlukan hasil agregat untuk cr.full_name dan cs.cs_id, fungsi agregat yang sesuai harus digunakan dalam pernyataan SELECT. Dengan memastikan setiap lajur dalam senarai SELECT sama ada diagregatkan atau disertakan dalam klausa GROUP BY, ralat ORA-00979 dihapuskan. Pengalihan keluar fungsi tolist() juga membantu menyelesaikan isu kerana ia bukan fungsi agregat.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Menghasilkan Ralat ORA-00979, dan Bagaimana Saya Boleh Membetulkannya?. 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