SQL GROUP BY sætning
- Forrige side SQL sum()
- Næste side SQL Having
Aggregeringsfunktioner (som SUM) kræver ofte GROUP BY sætning.
GROUP BY sætning
GROUP BY sætning bruges til at kombinere aggregeringsfunktioner, og gruppere resultatsæt baseret på en eller flere kolonner.
SQL GROUP BY syntaks
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
SQL GROUP BY eksempel
Vi har nedenstående "Orders" tabel:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
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 ønsker vi at finde den samlede beløb (total ordre) for hver kunde.
Vi ønsker at bruge GROUP BY sætningen til at gruppere kunder.
Vi bruger følgende SQL sætning:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
Resultatet af sætningen ligner dette:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
Er det ikke fantastisk, ikke sandt?
Lad os se, hvad der sker, hvis vi undlader GROUP BY:
SELECT Customer,SUM(OrderPrice) FROM Orders
Resultatet af sætningen ligner dette:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
Resultatet af sætningen er ikke det, vi har brug for.
Så hvorfor kan vi ikke bruge den nævnte SELECT sætning? Forklaringen er som følger: Den nævnte SELECT sætning specificerer to kolonner (Customer og SUM(OrderPrice)). "SUM(OrderPrice)" returnerer en enkelt værdi (totalen af "OrderPrice" kolonnen), mens "Customer" returnerer 6 værdier (hver værdi svarer til en række i "Orders" tabellen). Derfor får vi ikke de korrekte resultater. Men du har allerede set, at GROUP BY sætningen løser dette problem.
GROUP BY en overflod af kolonner
Vi kan også anvende GROUP BY sætning på en overflod af kolonner, som f.eks.:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- Forrige side SQL sum()
- Næste side SQL Having