Heim >Datenbank >MySQL-Tutorial >Wie löst man ORA-00979: Gruppieren von Spalten in SQL-Abfragen?
ORA-00979 in SQL-Abfragen verstehen und lösen
Der ORA-00979-Fehler „Kein GROUP BY-Ausdruck“ tritt auf, wenn eine SQL-Abfrage eine GROUP BY
-Klausel falsch verwendet. Dies geschieht, wenn die SELECT
-Anweisung Spalten enthält, die nicht in der GROUP BY
-Klausel erwähnt werden, oder Aggregatfunktionen für Spalten ohne Gruppierung verwendet.
Die GROUP BY
-Klausel gruppiert Zeilen mit identischen Werten in bestimmten Spalten und ermöglicht Aggregatfunktionen (wie SUM
, AVG
, MIN
, MAX
, COUNT
), um Daten innerhalb jeder Gruppe zusammenzufassen. Ohne ordnungsgemäße Gruppierung kann die Datenbank nicht bestimmen, welche Werte jeder Gruppe zugeordnet werden sollen, was zu dem Fehler führt.
Beispiel und Lösung:
Ein häufiges Szenario, das diesen Fehler verursacht, besteht darin, mehrere Spalten auszuwählen, aber nur nach einer Teilmenge zu gruppieren. Die Datenbank kann keinen einzelnen Wert für die nicht gruppierten Spalten innerhalb jeder Gruppe ermitteln.
Um das Problem zu beheben, gehen Sie entweder wie folgt vor:
Alle nicht aggregierten Spalten in die GROUP BY
-Klausel einschließen: Dies ist die einfachste Lösung, wenn Sie alle eindeutigen Kombinationen der ausgewählten Spalten sehen möchten.
Verwenden Sie Aggregatfunktionen für nicht gruppierte Spalten: Wenn Sie nur zusammenfassende Statistiken für bestimmte Spalten benötigen, wenden Sie Aggregatfunktionen (wie MIN
, MAX
oder AVG
) auf diese Spalten an. Dadurch wird die Ausgabe auf eine einzelne Zeile pro Gruppe reduziert.
Veranschaulichen wir es mit einer korrigierten Abfrage:
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cr.full_name, MIN(TO_CHAR(cf.fact_date, 'mm/dd/yyyy')) AS appt, -- Using MIN to aggregate the date 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, cr.full_name, cs.cs_id, cr.tracking_number -- All non-aggregated columns are now included ORDER BY cs.cs_id, cr.full_name;</code>
Durch die korrekte Einbeziehung aller nicht aggregierten Spalten in die GROUP BY
-Klausel wird die Abfrage ohne den ORA-00979-Fehler ausgeführt, wodurch die Datenintegrität gewährleistet und die erwarteten Ergebnisse bereitgestellt werden. Denken Sie daran, den Ansatz (einschließlich aller Spalten oder Verwendung von Aggregatfunktionen) zu wählen, der Ihren Datenanalyseanforderungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie löst man ORA-00979: Gruppieren von Spalten in SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!