SQLs GROUP BY
-Klausel: Ein tiefer Einblick
Die SQL-Klausel GROUP BY
ist ein leistungsstarkes Tool zum Gruppieren von Zeilen basierend auf angegebenen Spalten und ermöglicht aggregierte Berechnungen (wie SUM
, COUNT
, AVG
) für gruppierte Daten. Lassen Sie uns sein Verhalten mit und ohne Aggregatfunktionen untersuchen.
GROUP BY
Ohne Aggregatfunktionen: Die Gefahr
Die Verwendung von GROUP BY
ohne Aggregatfunktion führt zu einem Fehler. Betrachten Sie dieses Beispiel:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
Dies schlägt fehl, da GROUP BY
erfordert, dass alle nicht aggregierten Spalten in der SELECT
-Liste auch in der GROUP BY
-Klausel enthalten sind. Der Platzhalter *
wählt alle Spalten aus, wodurch die Abfrage mehrdeutig wird, da die Datenbank nicht bestimmen kann, welcher Wert für nicht gruppierte Spalten innerhalb jeder order_no
-Gruppe zurückgegeben werden soll.
GROUP BY
Mit Aggregatfunktionen: Die Lösung
Das Problem wird bei Verwendung einer Aggregatfunktion behoben. Aggregatfunktionen wirken sich auf die gesamte Gruppe aus und ermöglichen so, dass die Abfrage aussagekräftige Ergebnisse liefert. Berechnen Sie beispielsweise den Gesamtpreis für jede Bestellung:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
Diese Abfrage gibt erfolgreich die Summe von order_price
für jedes eindeutige order_no
zurück.
Aggregatfunktionen und gruppierte Daten: Verborgene Attribute enthüllen
Aggregatfunktionen bieten eine Möglichkeit, auf Attribute innerhalb jeder Gruppe zuzugreifen. Die Funktion SUM
berechnet im vorherigen Beispiel die Summe für jede order_no
-Gruppe. Dies demonstriert die Fähigkeit von Aggregatfunktionen, einen Drilldown in Gruppen durchzuführen und zusammengefasste Informationen abzurufen.
Standard-SQL-Konformität: Die GROUP BY
Regel
Standard-SQL schreibt (im Gegensatz zum milderen Ansatz von MySQL) vor, dass alle nicht aggregierten Spalten in der SELECT
-Liste in der GROUP BY
-Klausel erscheinen müssen. Somit ist die folgende Abfrage gültig:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no</code>
Dies ist gültig, weil order_no
, die nicht aggregierte Spalte, in der GROUP BY
-Klausel vorhanden ist. Das gleiche Prinzip gilt für Abfragen mit mehreren gruppierten Spalten und Aggregatfunktionen:
<code class="language-sql">SELECT order_no, order_price, MAX(order_item) FROM order_details GROUP BY order_no, order_price</code>
Diese Abfrage ist gültig, da sowohl order_no
als auch order_price
in der GROUP BY
-Klausel enthalten sind.
Das obige ist der detaillierte Inhalt vonWie funktioniert die GROUP BY-Klausel von SQL mit und ohne Aggregatfunktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!