Heim >Datenbank >MySQL-Tutorial >Wie funktionieren Aggregatfunktionen mit der GROUP BY-Klausel in SQL?
Grundlegendes zu den Funktionen GROUP BY und Aggregate von SQL
SQLs GROUP BY
-Klausel gruppiert Zeilen effizient basierend auf angegebenen Spalten. Bei der Auswahl von Spalten, die nicht in der Gruppierung enthalten sind, kommt es jedoch häufig zu Verwirrung.
Bedenken Sie diese Abfrage:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
Diese Abfrage schlägt in vielen Datenbanksystemen (wie Oracle) fehl, da versucht wird, alle Spalten (*
) auszuwählen, während nur nach order_no
gruppiert wird. Dies verstößt gegen die Regel, dass nicht aggregierte Spalten Teil der GROUP BY
-Klausel sein müssen.
Die Lösung? Fügen Sie nicht aggregierte Spalten neben Aggregatfunktionen in die GROUP BY
-Klausel ein. Zum Beispiel:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
Hier steht order_no
sowohl in der SELECT
- als auch in der GROUP BY
-Klausel, während SUM(order_price)
die Aggregation durchführt.
Beantwortung der Schlüsselfrage:
Können Aggregatfunktionen auf alle Spalten innerhalb einer Gruppe zugreifen?
Ja, Aggregatfunktionen wie SUM()
wirken auf alle Zeilen innerhalb jeder Gruppe und berechnen den Aggregatwert für die angegebene Spalte. Im obigen Beispiel summiert SUM(order_price)
den Preis für jedes order_no
.
Der Zugriff auf nicht aggregierte Spalten, ohne diese in die GROUP BY
-Klausel aufzunehmen, führt jedoch zu Fehlern. Die Datenbank kann nicht bestimmen, welcher Wert aus mehreren Zeilen innerhalb einer Gruppe ausgewählt werden soll.
Beziehen Sie daher immer alle nicht aggregierten Spalten in die GROUP BY
-Klausel ein oder beschränken Sie die SELECT
-Klausel auf nur Aggregatfunktionen, wenn Sie GROUP BY
verwenden.
Das obige ist der detaillierte Inhalt vonWie funktionieren Aggregatfunktionen mit der GROUP BY-Klausel in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!