SQL GROUP BY-sats
- Föregående sida SQL sum()
- Nästa sida SQL Having
Sammanfattande funktioner (t.ex. SUM) kräver ofta att GROUP BY-satsen läggs till.
GROUP BY-sats
GROUP BY-satsen används för att kombinera sammanfattande funktioner och gruppera resultatset efter en eller flera kolonner.
SQL GROUP BY-syntax
SELECT column_name, sammanfattande funktion(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
SQL GROUP BY-exempel
Vi har följande "Orders"-tabell:
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 vill vi hitta den totala summan för varje kund (totala ordrar).
Vi vill använda GROUP BY-satsen för att gruppera kunder.
Vi använder följande SQL-sats:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
Resultatuppsättningen liknar följande:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
Mycket bra, eller hur?
Låt oss se vad som händer om vi hoppar över GROUP BY:
SELECT Customer,SUM(OrderPrice) FROM Orders
Resultatuppsättningen liknar följande:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
Resultatuppsättningen är inte vad vi behöver.
Varför kan vi inte använda den ovanstående SELECT-satsen? Förklaringar följer: Den ovanstående SELECT-satsen specificerar två kolumner (Customer och SUM(OrderPrice)). "SUM(OrderPrice)" returnerar ett enskilt värde (det totala beloppet för "OrderPrice"-kolumnen), medan "Customer" returnerar 6 värden (varje värde motsvarar varje rad i "Orders"-tabellen). Därför får vi inte det korrekta resultatet. Men som du redan sett löser GROUP BY-satsen detta problem.
GROUP BY en eller flera kolumner
Vi kan också tillämpa GROUP BY-satsen på en eller flera kolumner, som följande:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- Föregående sida SQL sum()
- Nästa sida SQL Having