Menyahkod Ralat ORA-00979 dalam Klausa GROUP BY SQL
Ralat SQL biasa ini, ORA-00979 ("Bukan ungkapan GROUP BY"), berlaku apabila pertanyaan anda menggunakan GROUP BY
tetapi termasuk lajur dalam senarai SELECT
yang tidak dikumpulkan atau diagregatkan. Mari terokai cara membetulkannya.
Masalah utama terletak pada ketidakpadanan antara klausa SELECT
dan GROUP BY
. GROUP BY
menyatukan baris dengan nilai yang sepadan ke dalam kumpulan. Setiap lajur dalam pernyataan SELECT
anda mestilah sama ada:
GROUP BY
: Ini memastikan setiap nilai yang dipilih dikaitkan secara langsung dengan kumpulan.MIN()
, MAX()
, SUM()
, AVG()
, COUNT()
untuk meringkaskan nilai dalam setiap kumpulan.Contoh Ilustrasi
Bayangkan meja dengan janji temu:
Appointment ID (appt_id) | Patient Name (patient) | Doctor (doctor) |
---|---|---|
1 | Alice | Dr. Smith |
2 | Bob | Dr. Smith |
3 | Charlie | Dr. Jones |
Pertanyaan yang salah:
<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>
Ini akan gagal dengan ORA-00979 kerana appt_id
dan patient
tidak dikumpulkan.
Pendekatan Betul
GROUP BY
:<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>
Ini mengira janji temu setiap doktor.
<code class="language-sql">SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;</code>
Ini mengira janji temu dan mencari ID temu janji minimum bagi setiap doktor.
Kuncinya adalah untuk memastikan hubungan yang konsisten antara kriteria pengelompokan dan data yang dipilih. Menggunakan fungsi agregat membolehkan anda meringkaskan data dalam kumpulan, mengelakkan ralat ORA-00979.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Menjana ORA-00979: Bukan KUMPULAN MENGIKUT Ungkapan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!