SQL GROUP BY sætning

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