Heim >Datenbank >MySQL-Tutorial >Wie behebe ich ORA-00979-Fehler, die durch GROUP BY- und ORDER BY-Klauselkonflikte in SQL verursacht werden?
Fehlerbehebung bei ORA-00979: GROUP BY
und ORDER BY
Klauselkonflikte
Der ORA-00979-Fehler in SQL entsteht durch eine Nichtübereinstimmung zwischen den Klauseln GROUP BY
und ORDER BY
. GROUP BY
aggregiert Daten, während ORDER BY
sie sortiert. Der Fehler tritt auf, wenn ORDER BY
Spalten enthält, die in GROUP BY
nicht vorhanden sind.
Das Problem verstehen
Betrachten Sie diese Beispielabfrage, die den ORA-00979-Fehler erzeugt:
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, LISTAGG(TO_CHAR(cf.fact_date, 'mm/dd/yyyy'), ',') WITHIN GROUP (ORDER BY cf.fact_date) AS "appt", cs.cs_id, cr.tracking_number FROM review cr JOIN cs ON cr.cs_sk = cs.cs_sk JOIN fact cf ON cr.review_sk = cf.review_wk WHERE UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%' AND row_delete_date_time IS NULL AND cr.fact_type_code = 183050 GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number ORDER BY cs.cs_id, cr.full_name;</code>
Der Fehler stammt von ORDER BY cs.cs_id, cr.full_name
. cs.cs_id
und cr.full_name
sind nicht in der GROUP BY
-Klausel enthalten.
Lösungen
Um ORA-00979 aufzulösen, müssen alle Spalten in ORDER BY
entweder in GROUP BY
sein oder aggregiert sein:
Lösung 1: Zu GROUP BY
Wenn die Spalten für die Gruppierung wichtig sind, fügen Sie sie in die GROUP BY
-Klausel ein:
<code class="language-sql">GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number, cs.cs_id, cr.full_name ORDER BY cs.cs_id, cr.full_name;</code>
Lösung 2: Aggregatfunktionen verwenden
Wenn die Spalten für die Gruppierung nicht entscheidend sind, verwenden Sie Aggregatfunktionen wie MIN
, MAX
oder andere, die für Ihre Daten geeignet sind:
<code class="language-sql">GROUP BY cr.review_sk, cr.cs_sk, cr.tracking_number ORDER BY MIN(cs.cs_id), MIN(cr.full_name);</code>
Die Wahl der richtigen Lösung hängt von der Logik Ihrer Abfrage und den gewünschten Ergebnissen ab. Durch das Hinzufügen zu GROUP BY
bleiben mehr Details erhalten, während die Verwendung von Aggregatfunktionen Daten innerhalb von Gruppen zusammenfasst. Erwägen Sie sorgfältig die Auswirkungen jedes Ansatzes, bevor Sie ihn umsetzen. Denken Sie daran, geeignete Aggregatfunktionen basierend auf Ihren Daten und dem gewünschten Ergebnis zu verwenden.
Das obige ist der detaillierte Inhalt vonWie behebe ich ORA-00979-Fehler, die durch GROUP BY- und ORDER BY-Klauselkonflikte in SQL verursacht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!