SQL GROUP BY-sats

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