Heim > Datenbank > MySQL-Tutorial > Wie löst man ORA-00979: Gruppieren von Spalten in SQL-Abfragen?

Wie löst man ORA-00979: Gruppieren von Spalten in SQL-Abfragen?

Mary-Kate Olsen
Freigeben: 2025-01-24 04:52:09
Original
767 Leute haben es durchsucht

How to Resolve ORA-00979: Grouping Columns in SQL Queries?

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:

  1. 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.

  2. 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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage