Heim >Datenbank >MySQL-Tutorial >Warum führt meine SQL-Abfrage zu einem ORA-00979-Fehler und wie kann ich ihn beheben?
Fehlerbehebung bei ORA-00979: Ein häufiges SQL-GROUP-BY-Problem
Der gefürchtete ORA-00979-Fehler tritt häufig auf, wenn mit der GROUP BY
-Klausel von SQL gearbeitet wird. Dieser Fehler weist auf eine Nichtübereinstimmung zwischen den ausgewählten und den gruppierten Spalten hin. Dies tritt insbesondere dann auf, wenn SELECT
-Anweisungen Spalten enthalten, die nicht in der GROUP BY
-Klausel enthalten sind, oder wenn Nicht-Aggregatfunktionen auf nicht gruppierte Spalten angewendet werden.
Lassen Sie uns eine problematische Abfrage untersuchen:
<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>
Diese Abfrage löst ORA-00979 aus, da die GROUP BY
-Klausel unvollständig ist. Um dies zu beheben, schließen Sie entweder alle nicht aggregierte Spalten aus der SELECT
-Liste in die GROUP BY
-Klausel ein oder wenden Sie Aggregatfunktionen an (wie COUNT
, SUM
, MIN
, , MAX
) auf die Spalten, die nicht explizit gruppiert sind.AVG
<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>Die wichtigste Änderung besteht darin,
und cr.full_name
zur cs.cs_id
-Klausel hinzuzufügen. Wenn Sie alternativ nur aggregierte Ergebnisse für GROUP BY
und cr.full_name
benötigen, sollten entsprechende Aggregatfunktionen in der cs.cs_id
-Anweisung verwendet werden. Indem sichergestellt wird, dass jede Spalte in der SELECT
-Liste entweder aggregiert oder in der SELECT
-Klausel enthalten ist, wird der ORA-00979-Fehler beseitigt. Das Entfernen der Funktion GROUP BY
trägt ebenfalls zur Behebung des Problems bei, da es sich nicht um eine Aggregatfunktion handelt.tolist()
Das obige ist der detaillierte Inhalt vonWarum führt meine SQL-Abfrage zu einem ORA-00979-Fehler und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!