Ich erhalte ORA-00979 mit der folgenden Abfrage:
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;
Ich konnte keine Beispiele finden, die sowohl GROUP BY- als auch ORDER BY-Klauseln in derselben Abfrage enthielten. Ich habe versucht, jedes Feld einzeln aus der Gruppe zu entfernen, erhalte jedoch immer noch den gleichen Fehler.
Nehmen Sie
GROUP BY
alleSELECT
Ausdrücke in die Klausel auf , die keine Gruppenfunktionsargumente sind.quelle
Schade, dass Oracle solche Einschränkungen hat. Sicher, das Ergebnis für eine Spalte, die nicht in GROUP BY enthalten ist, ist zufällig, aber manchmal möchten Sie das. Dummes Oracle, das kannst du in MySQL / MSSQL.
ABER es gibt eine Problemumgehung für Oracle:
Während die folgende Zeile nicht funktioniert
Sie können Oracle mit einigen Nullen wie den folgenden austricksen, um Ihre Spalte im Gültigkeitsbereich zu halten, aber nicht danach zu gruppieren (vorausgesetzt, dies sind Zahlen, andernfalls verwenden Sie CONCAT).
quelle
Wenn Sie auf Grund einschließlich keine Gruppierung
GROUP BY
Klausel, jeden Ausdruck inSELECT
, die keine Gruppenfunktion (oder Aggregatfunktion oder aggregierte Spalte) wieCOUNT
,AVG
,MIN
,MAX
,SUM
und so weiter ( Liste der Aggregatfunktionen ) sollten in vorliegenGROUP BY
Klausel.Beispiel (korrekter Weg) (hier
employee_id
ist keine Gruppenfunktion (nicht aggregierte Spalte), daher muss sie in erscheinenGROUP BY
. Im Gegensatz dazu ist sum (Gehalt) eine Gruppenfunktion (aggregierte Spalte), sodass es nicht erforderlich ist, in derGROUP BY
Klausel zu erscheinen .Beispiel (falscher Weg) (hier
employee_id
ist keine Gruppenfunktion und sie erscheint nicht in derGROUP BY
Klausel, was zum ORA-00979-Fehler führt.Um dies zu korrigieren, müssen Sie einen der folgenden Schritte ausführen:
SELECT
Klausel aufgeführt sind , in dieGROUP BY
Klausel einSELECT
Klausel.quelle
Sie sollten Folgendes tun:
quelle
Der gleiche Fehler tritt auch auf, wenn das Schlüsselwort UPPER oder LOWER nicht an beiden Stellen im ausgewählten Ausdruck und in der Gruppe nach Ausdruck verwendet wird.
Falsch :-
Richtig :-
quelle
Die Gruppierung nach wird verwendet, um einige Daten abhängig von der Aggregatfunktion zu aggregieren. Ansonsten müssen Sie Spalten oder Spalten einfügen, für die Sie die Gruppierung benötigen.
beispielsweise:
Dies führt zu einem maximalen Gehalt der Abteilungen.
Wenn wir nun die
d.deptno
Klausel from group by weglassen , wird derselbe Fehler ausgegeben.quelle
Zusätzlich zu den anderen Antworten kann dieser Fehler auftreten, wenn eine order by-Klausel inkonsistent ist. Zum Beispiel:
quelle