SQL GROUP BY Uitvoeringscommando

Aggregate functions (such as SUM) often require the addition of a GROUP BY statement.

GROUP BY statement

The GROUP BY statement is used to combine aggregate functions, grouping the result set based on one or more columns.

SQL GROUP BY syntax

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

SQL GROUP BY example

We have the following "Orders" table:

O_Id OrderDatum OrderPrijs Klant
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

Nu willen we de totale som van elke klant (het totaal van de bestellingen) vinden.

We willen de GROUP BY-sintaxis gebruiken om klanten te combineren.

We gebruiken de volgende SQL-sintaxis:

SELECT Klant,SUM(OrderPrijs) FROM Orders
GROUP BY Klant

De resultatenset lijkt erop:

Klant SUM(OrderPrijs)
Bush 2000
Carter 1700
Adams 2000

Is dat niet geweldig, niet?

Laten we eens kijken wat er gebeurt als we GROUP BY overslaan:

SELECT Klant,SUM(OrderPrijs) FROM Orders

De resultatenset lijkt erop:

Klant SUM(OrderPrijs)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Deze resultatenset is niet wat we nodig hebben.

Waarom kunnen we dan niet de bovenstaande SELECT-sintaxis gebruiken? Uitleg: de bovenstaande SELECT-sintaxis specificeert twee kolommen (Klant en SUM(OrderPrijs)). "SUM(OrderPrijs)" retourneert een enkele waarde (het totaal van de "OrderPrijs" kolom), terwijl "Klant" zes waarden retourneert (elke waarde corresponds met een rij in de "Orders" tabel). Daarom krijgen we niet het juiste resultaat. Echter, zoals u heeft gezien, lost de GROUP BY-sintaxis dit probleem op.

GROUP BY een of meer kolommen

We kunnen ook een GROUP BY-sintaxis toepassen op een of meer kolommen, zoals hieronder:

SELECT Klant,OrderDatum,SUM(OrderPrijs) FROM Orders
GROUP BY Klant,OrderDatum