SQL GROUP BY Uitvoeringscommando
- Vorige pagina SQL sum()
- Volgende pagina SQL Having
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
- Vorige pagina SQL sum()
- Volgende pagina SQL Having