Dekodierung des ORA-00979-Fehlers in der GROUP BY-Klausel von SQL
Dieser häufige SQL-Fehler, ORA-00979 („Kein GROUP BY-Ausdruck“), tritt auf, wenn Ihre Abfrage GROUP BY
verwendet, aber Spalten in der SELECT
-Liste enthält, die weder gruppiert noch aggregiert sind. Lassen Sie uns herausfinden, wie Sie dieses Problem beheben können.
Das Kernproblem liegt in der Diskrepanz zwischen den Klauseln SELECT
und GROUP BY
. GROUP BY
konsolidiert Zeilen mit übereinstimmenden Werten in Gruppen. Jede Spalte in Ihrer SELECT
-Anweisung muss entweder:
GROUP BY
-Klausel: Dadurch wird sichergestellt, dass jeder ausgewählte Wert direkt einer Gruppe zugeordnet ist.MIN()
, MAX()
, SUM()
, AVG()
, COUNT()
, um Werte innerhalb jeder Gruppe zusammenzufassen.Anschauliches Beispiel
Stellen Sie sich einen Tisch mit Terminen vor:
Appointment ID (appt_id) | Patient Name (patient) | Doctor (doctor) |
---|---|---|
1 | Alice | Dr. Smith |
2 | Bob | Dr. Smith |
3 | Charlie | Dr. Jones |
Eine falsche Abfrage:
<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>
Dies schlägt mit ORA-00979 fehl, da appt_id
und patient
nicht gruppiert sind.
Richtige Vorgehensweisen
GROUP BY
einschließen:<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>
Dies zählt die Termine pro Arzt.
<code class="language-sql">SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;</code>
Dies zählt Termine und ermittelt die Mindesttermin-ID pro Arzt.
Der Schlüssel besteht darin, eine konsistente Beziehung zwischen den Gruppierungskriterien und den ausgewählten Daten sicherzustellen. Durch die Verwendung von Aggregatfunktionen können Sie Daten innerhalb von Gruppen zusammenfassen und so den ORA-00979-Fehler vermeiden.
Das obige ist der detaillierte Inhalt vonWarum generiert meine SQL-Abfrage ORA-00979: Kein GROUP BY-Ausdruck?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!