Saya mendapatkan ORA-00979 dengan pertanyaan berikut:
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;
Saya tidak dapat menemukan contoh yang memiliki klausa GROUP BY dan ORDER BY dalam kueri yang sama. Saya mencoba menghapus setiap bidang dari grup satu per satu, tetapi saya masih mendapatkan kesalahan yang sama.
Sertakan dalam
GROUP BY
klausa semuaSELECT
ekspresi yang bukan argumen fungsi grup.sumber
Sayang sekali Oracle memiliki keterbatasan seperti ini. Tentu, hasil untuk kolom yang tidak ada dalam GROUP BY akan acak, tetapi terkadang Anda menginginkannya. Oracle konyol, Anda dapat melakukan ini di MySQL / MSSQL.
TAPI ada pekerjaan untuk Oracle:
Sementara baris berikut tidak berfungsi
Anda dapat menipu Oracle dengan beberapa 0 seperti berikut ini, untuk menjaga ruang lingkup kolom Anda, tetapi tidak mengelompokkannya (dengan asumsi ini adalah angka, jika tidak gunakan CONCAT)
sumber
Jika Anda pengelompokan berdasarkan termasuk
GROUP BY
klausul, setiap ekspresi diSELECT
, yang tidak fungsi kelompok (atau fungsi agregat atau kolom dikumpulkan) sepertiCOUNT
,AVG
,MIN
,MAX
,SUM
dan sebagainya ( Daftar fungsi Agregat ) harus hadir dalamGROUP BY
klausa.Contoh (cara yang benar) (di sini
employee_id
bukan fungsi grup (kolom non-agregat), jadi harus muncul masukGROUP BY
. Sebaliknya, jumlah (gaji) adalah fungsi grup (kolom agregat), sehingga tidak perlu muncul diGROUP BY
klausa .Contoh (cara yang salah) (di sini
employee_id
bukan fungsi grup dan tidak muncul dalamGROUP BY
klausa, yang akan mengarah ke Kesalahan ORA-00979.Untuk memperbaiki Anda perlu melakukan salah satu dari yang berikut:
SELECT
klausa dalamGROUP BY
klausaSELECT
klausa.sumber
Anda harus melakukan hal berikut:
sumber
Kesalahan yang sama juga terjadi ketika kata kunci UPPER atau RENDAH tidak digunakan di kedua tempat dalam ekspresi pilih dan grup menurut ekspresi.
Salah: -
Baik :-
sumber
Grup oleh digunakan untuk mengumpulkan beberapa data, tergantung pada fungsi agregat, dan selain itu Anda perlu meletakkan kolom atau kolom yang Anda butuhkan untuk pengelompokan.
sebagai contoh:
Ini akan menghasilkan gaji maksimum departemen.
Sekarang jika kita menghilangkan
d.deptno
grup dari dengan klausa itu akan memberikan kesalahan yang sama.sumber
Selain jawaban lain, kesalahan ini dapat terjadi jika ada ketidakkonsistenan dalam urutan dengan klausa. Misalnya:
sumber