SQL GROUP BY-Anweisung

Aggregationsfunktionen (z.B. SUM) erfordern oft die Hinzufügung einer GROUP BY-Anweisung.

GROUP BY Anweisung

Die GROUP BY-Anweisung wird verwendet, um Aggregationsfunktionen zu kombinieren und die Ergebnismenge nach einer oder mehreren Spalten zu gruppieren.

SQL GROUP BY Syntax

SELECT Spaltenname, aggregierte Funktion(Spaltenname)
FROM Tabellenname
WHERE Spaltenname Operator Wert
GROUP BY Spaltenname

SQL GROUP BY Beispiel

Wir besitzen die folgende "Orders"-Tabelle:

O_Id Bestelldatum Bestellpreis Kunde
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

Jetzt möchten wir die Gesamtsumme der Beträge (Gesamtbestellungen) jedes Kunden finden.

Wir möchten die GROUP BY-Anweisung verwenden, um die Kunden zu kombinieren.

Wir verwenden die folgenden SQL-Anweisungen:

SELECT Kunde, SUM(Bestellpreis) FROM Bestellungen
GROUP BY Kunde

Der Ergebnissatz ähnelt dem folgenden:

Kunde SUM(Bestellpreis)
Bush 2000
Carter 1700
Adams 2000

Toll, nicht wahr?

Lassen Sie uns sehen, was passiert, wenn wir GROUP BY auslassen:

SELECT Kunde, SUM(Bestellpreis) FROM Bestellungen

Der Ergebnissatz ähnelt dem folgenden:

Kunde SUM(Bestellpreis)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Der obige Ergebnissatz entspricht nicht unseren Anforderungen.

Warum kann man nicht die obige SELECT-Anweisung verwenden? Erklärung: Die obige SELECT-Anweisung spezifiziert zwei Spalten (Kunde und SUM(Bestellpreis)). "SUM(Bestellpreis)" gibt einen einzigen Wert zurück (der Gesamtbetrag der "Bestellpreis"-Spalte), während "Kunde" sechs Werte zurückgibt (jeder Wert entspricht einer Zeile im "Bestellungen"-Tabellen). Daher erhalten wir nicht das richtige Ergebnis. Allerdings haben Sie gesehen, dass die GROUP BY-Anweisung dieses Problem löst.

GROUP BY eine über eine Spalte hinaus

Wir können auch GROUP BY-Anweisungen auf eine über eine Spalte hinaus anwenden, wie zum Beispiel:

SELECT Kunde, Bestelldatum, SUM(Bestellpreis) FROM Bestellungen
GROUP BY Kunde, Bestelldatum