Megosztás a következőn keresztül:


SELECT - CSOPORTOS Transact-SQL

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

SELECT utasítás záradék, amely a lekérdezés eredményét sorcsoportokra osztja, általában egy vagy több összesítés végrehajtásával minden csoportban. A SELECT utasítás csoportonként egy sort ad vissza.

Syntax

Transact-SQL szintaxis konvenciók

-- Syntax for SQL Server and Azure SQL Database   
-- ISO-Compliant Syntax  
  
GROUP BY {
      column-expression  
    | ROLLUP ( <group_by_expression> [ ,...n ] )  
    | CUBE ( <group_by_expression> [ ,...n ] )  
    | GROUPING SETS ( <grouping_set> [ ,...n ]  )  
    | () --calculates the grand total 
} [ ,...n ] 
 
<group_by_expression> ::=  
      column-expression  
    | ( column-expression [ ,...n ] )    
   
<grouping_set> ::=  
      () --calculates the grand total  
    | <grouping_set_item>  
    | ( <grouping_set_item> [ ,...n ] )  
  
<grouping_set_item> ::=  
      <group_by_expression>  
    | ROLLUP ( <group_by_expression> [ ,...n ] )  
    | CUBE ( <group_by_expression> [ ,...n ] )  
  

-- For backward compatibility only.
-- Non-ISO-Compliant Syntax for SQL Server and Azure SQL Database 
  
GROUP BY {
       ALL column-expression [ ,...n ] 
    | column-expression [ ,...n ]  WITH { CUBE | ROLLUP }    
       }

-- Syntax for Azure Synapse Analytics 
  
GROUP BY {
      column-name [ WITH (DISTRIBUTED_AGG) ]  
    | column-expression
    | ROLLUP ( <group_by_expression> [ ,...n ] ) 
} [ ,...n ]

-- Syntax for Parallel Data Warehouse  
  
GROUP BY {
      column-name [ WITH (DISTRIBUTED_AGG) ]  
    | column-expression
} [ ,...n ]

Arguments

oszlopkifejezés

Oszlopot vagy nem összesítő számítást ad meg egy oszlopon. Ez az oszlop egy táblához, származtatott táblához vagy nézethez is tartozhat. Az oszlopnak meg kell jelennie a SELECT utasítás FROM záradékában, de nem szükséges megjelennie a SELECT listában.

Érvényes kifejezésekért tekintse meg a kifejezést.

Az oszlopnak meg kell jelennie a SELECT utasítás FROM záradékában, de nem szükséges megjelennie a SELECT listában. A kijelölési< listában szereplő összes nem összesítő kifejezés >minden táblájának vagy nézetoszlopának szerepelnie kell a GROUP BY listában:

A következő utasítások engedélyezettek:

SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA, ColumnB;  
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA, ColumnB;  
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA + ColumnB;  
SELECT ColumnA + ColumnB + constant FROM T GROUP BY ColumnA, ColumnB;  

A következő utasítások nem engedélyezettek:

SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA + ColumnB;  
SELECT ColumnA + constant + ColumnB FROM T GROUP BY ColumnA + ColumnB;  

Az oszlopkifejezés nem tartalmazhat:

  • A SELECT listában definiált oszlop aliasa. Használhat oszlop aliast a FROM záradékban definiált származtatott táblákhoz.
  • Szöveg, ntext vagy kép típusú oszlop. Használhat azonban egy szöveges, ntext vagy képoszlopot argumentumként egy olyan függvényhez, amely érvényes adattípusú értéket ad vissza. A kifejezés használhatja például a SUBSTRING() és a CAST() függvényt. Ez a HAVING záradékban lévő kifejezésekre is vonatkozik.
  • xml-adattípus metódusai. Tartalmazhat egy felhasználó által definiált függvényt, amely XML-adattípus-metódusokat használ. Tartalmazhat xml-adattípus-metódusokat használó számított oszlopot.
  • Egy allekérdezés. A függvény a 144-et adja vissza.
  • Oszlop indexelt nézetben.

GROUP BY oszlopkifejezés [ ,... n ]

A SELECT utasítás eredményeinek csoportosítása egy vagy több oszlopkifejezés listájában szereplő értékek alapján.

Ez a lekérdezés például létrehoz egy Sales táblát az Ország, a Régió és a Sales oszlopokkal. Négy sort szúr be, és két sor egyező értékekkel rendelkezik az Ország és a Régió értékekkel.

CREATE TABLE Sales ( Country VARCHAR(50), Region VARCHAR(50), Sales INT );

INSERT INTO sales VALUES (N'Canada', N'Alberta', 100);
INSERT INTO sales VALUES (N'Canada', N'British Columbia', 200);
INSERT INTO sales VALUES (N'Canada', N'British Columbia', 300);
INSERT INTO sales VALUES (N'United States', N'Montana', 100);

A Sales tábla a következő sorokat tartalmazza:

Country Region Sales
Canada Alberta 100
Canada Brit Columbia 200
Canada Brit Columbia 300
Egyesült Államok Montana 100

Ez a következő lekérdezés csoportosítja az országot és a régiót, és az értékek összesítését adja eredményül.

SELECT Country, Region, SUM(sales) AS TotalSales
FROM Sales
GROUP BY Country, Region;

A lekérdezés eredménye 3 sorból áll, mivel az ország és a régió értékeinek 3 kombinációja van. A Kanadai és a Brit Columbia összesen két sorból áll.

Country Region TotalSales
Canada Alberta 100
Canada Brit Columbia 500
Egyesült Államok Montana 100

CSOPORTOSÍTÁS ÖSSZESÍTÉS SZERINT

Létrehoz egy csoportot az oszlopkifejezések minden kombinációjához. Emellett az eredményeket részösszegekbe és végösszegekbe "összegezi". Ehhez jobbról balra halad, csökkentve azoknak az oszlopkifejezéseknek a számát, amelyeken csoportokat és összesítéseket hoz létre.

Az oszloprend hatással van a ROLLUP kimenetre, és befolyásolhatja az eredményhalmaz sorainak számát.

Létrehozhat például GROUP BY ROLLUP (col1, col2, col3, col4) csoportokat az oszlopkifejezések egyes kombinációihoz az alábbi listákban.

  • 1. osztály, 2. osztály, 3. osztály, 4.
  • col1, col2, col3, NULL
  • col1, col2, NULL, NULL
  • col1, NULL, NULL, NULL
  • NULL, NULL, NULL, NULL – Ez a végösszeg

Az előző példában szereplő táblázatot használva ez a kód egy GROUP BY ROLLUP műveletet futtat egyszerű GROUP BY helyett.

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP (Country, Region);

A lekérdezés eredménye ugyanazokkal az összesítésekkel rendelkezik, mint az egyszerű GROUP BY a ROLLUP nélkül. Emellett részösszegeket is létrehoz az ország minden értékéhez. Végül az összes sor végösszegét adja meg. Az eredmény így néz ki:

Country Region TotalSales
Canada Alberta 100
Canada Brit Columbia 500
Canada NULL 600
Egyesült Államok Montana 100
Egyesült Államok NULL 100
NULL NULL 700

CSOPORTOSÍTÁS KOCKA SZERINT ( )

A GROUP BY CUBE csoportokat hoz létre az oszlopok összes lehetséges kombinációjához. A GROUP BY CUBE (a, b) esetében az eredmények a (a, b), (NULL, b), (a, NULL) és (NULL, NULL) egyedi értékek csoportjait tartalmaznak.

Az előző példák táblázatát használva ez a kód egy GROUP BY CUBE műveletet futtat országon és régión.

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country, Region);

A lekérdezés eredménye a (Country, Region), (NULL, Region), (Country, NULL) és (NULL, NULL) egyedi értékek csoportjait tartalmaz. Az eredmények a következőképpen néznek ki:

Country Region TotalSales
Canada Alberta 100
NULL Alberta 100
Canada Brit Columbia 500
NULL Brit Columbia 500
Egyesült Államok Montana 100
NULL Montana 100
NULL NULL 700
Canada NULL 600
Egyesült Államok NULL 100

CSOPORTOSÍTÁS CSOPORTOSÍTÁSI CSOPORTOK SZERINT ( )

A CSOPORTOSÍTÁSI CSOPORTOK lehetőség lehetővé teszi, hogy több GROUP BY záradékot egyesítsen egy GROUP BY záradékkal. Az eredmények egyenértékűek az UNION ALL megadott csoportokkal.

Például ugyanazt GROUP BY ROLLUP (Country, Region)GROUP BY GROUPING SETS ( ROLLUP (Country, Region) ) az eredményt adja vissza.

Ha a CSOPORTOSÍTÁSI CSOPORTOK két vagy több elemet tartalmaznak, az eredmények az elemek egyesítését képezik. Ez a példa a ROLLUP és a KOCKA eredmények ország és régió szerinti egyesítését adja vissza.

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS ( ROLLUP (Country, Region), CUBE (Country, Region) );

Az eredmények megegyeznek azzal a lekérdezéssel, amely a két GROUP BY utasítás egyesítését adja vissza.

SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP (Country, Region)
UNION ALL
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country, Region);

Az SQL nem összesíti a GROUPING SETS-listákhoz létrehozott ismétlődő csoportokat. Ebben az esetben GROUP BY ( (), CUBE (Country, Region) )például mindkét elem egy sort ad vissza a végösszeghez, és mindkét sor megjelenik az eredmények között.

CSOPORTOSÍTÁS ()

Megadja az üres csoportot, amely a végösszeget hozza létre. Ez a CSOPORTOSÍTÁSI KÉSZLET egyik elemeként hasznos. Ez az utasítás például az egyes országok/régiók teljes értékesítését adja meg, majd az összes ország/régió végösszegét adja meg.

SELECT Country, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS ( Country, () );

GROUP BY ALL oszlopkifejezés [ ,... n ]

A következőkre vonatkozik: SQL Server és Azure SQL Database

Note

Ez a szintaxis csak a visszamenőleges kompatibilitáshoz van megadva. Egy későbbi verzióban el lesz távolítva. Ne használja ezt a szintaxist az új fejlesztési munkában, és tervezze módosítani azokat az alkalmazásokat, amelyek jelenleg ezt a szintaxist használják.

Megadja, hogy az összes csoportot belefoglalja az eredményekbe, függetlenül attól, hogy megfelelnek-e a WHERE záradék keresési feltételeinek. Azok a csoportok, amelyek nem felelnek meg a keresési feltételeknek, null értékkel rendelkeznek az összesítéshez.

CSOPORTOSÍTÁS AZ ÖSSZES SZERINT:

  • A távoli táblákhoz hozzáférő lekérdezések nem támogatottak, ha a lekérdezésben where záradék is szerepel.
  • A FILESTREAM attribútummal rendelkező oszlopok sikertelenek lesznek.

GROUP BY oszlopkifejezés [ ,... n ] WITH { CUBE | ÖSSZESÍTÉS }

A következőkre vonatkozik: SQL Server és Azure SQL Database

Note

Ez a szintaxis csak a visszamenőleges kompatibilitáshoz van megadva. Ne használja ezt a szintaxist az új fejlesztési munkában, és tervezze módosítani azokat az alkalmazásokat, amelyek jelenleg ezt a szintaxist használják.

WITH (DISTRIBUTED_AGG)

A következőkre vonatkozik: Azure Synapse Analytics and Analytics Platform System (PDW)

A DISTRIBUTED_AGG lekérdezési tipp arra kényszeríti a nagymértékben párhuzamos feldolgozási (MPP-) rendszert, hogy az összesítés végrehajtása előtt újra elosztsa egy táblát egy adott oszlopon. A GROUP BY záradéknak csak egy oszlopa rendelkezhet DISTRIBUTED_AGG lekérdezési tippel. A lekérdezés befejezése után az újraterjesztett tábla el lesz ejtve. Az eredeti tábla nem módosul.

MEGJEGYZÉS: A DISTRIBUTED_AGG lekérdezési tipp a korábbi Analytics Platform System (PDW) verziókkal való visszamenőleges kompatibilitást szolgálja, és a legtöbb lekérdezés teljesítményét nem javítja. Alapértelmezés szerint az MPP már szükség szerint újraosztja az adatokat az összesítések teljesítményének javítása érdekében.

Általános megjegyzések

A GROUP BY működése a SELECT utasítással

SELECT lista:

  • Vektoraggregátumok. Ha az összesítő függvények szerepelnek a SELECT listában, a GROUP BY kiszámítja az egyes csoportok összesítő értékét. Ezeket vektor aggregátumoknak nevezzük.
  • Különálló aggregátumok. Az AVG (DISTINCT column_name), a COUNT (DISTINCT column_name) és a SZUM (DISTINCT column_name) összesítését a ROLLUP, a KOCKA és a CSOPORTOSÍTÁSI KÉSZLET támogatja.

WHERE záradék:

  • Az SQL eltávolítja azokat a sorokat, amelyek nem felelnek meg a WHERE záradék feltételeinek a csoportosítási művelet végrehajtása előtt.

HAVING klauzulád:

  • Az SQL a having záradékkal szűri a csoportokat az eredményhalmazban.

ORDER BY záradék:

  • Az ORDER BY záradék használatával rendelje meg az eredményhalmazt. A GROUP BY záradék nem rendezi az eredményhalmazt.

NULL értékek:

  • Ha egy csoportosítási oszlop NULL értékeket tartalmaz, a rendszer az összes NULL értéket egyenlőnek tekinti, és egyetlen csoportba gyűjti őket.

Korlátozások és korlátozások

A következőkre vonatkozik: SQL Server (2008-tól kezdődően) és Azure Synapse Analytics

Maximális kapacitás

A ROLLUP, CUBE vagy GROUPING SETS függvényt használó GROUP BY záradék esetén a kifejezések maximális száma 32. A csoportok maximális száma 4096 (212). Az alábbi példák sikertelenek, mert a GROUP BY záradék több mint 4096 csoporttal rendelkezik.

  • Az alábbi példa 4097 (212 + 1) csoportosítási csoportot hoz létre, és sikertelen lesz.

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )  
    
  • Az alábbi példa 4097 (212 + 1) csoportot hoz létre, és sikertelen lesz. Mind CUBE () a csoportosítási () csoport teljes sort hoz létre, és a duplikált csoportosítási csoportok nem lesznek kizárva.

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())  
    
  • Ez a példa a visszafelé kompatibilis szintaxist használja. 8192 (213) csoportosítási csoportot hoz létre, és sikertelen lesz.

    GROUP BY CUBE (a1, ..., a13)   
    GROUP BY a1, ..., a13 WITH CUBE   
    

    A KOCKA vagy a ROLLUP értéket nem tartalmazó, visszamenőlegesen kompatibilis GROUP BY záradékok esetében a csoportosítási elemek számát a GROUP BY oszlopméretek, az összesített oszlopok és a lekérdezésben szereplő összesített értékek korlátozzák. Ez a korlát a köztes munkatáblán lévő 8060 bájtos korlátból származik, amely a köztes lekérdezési eredmények tárolásához szükséges. A KOCKA vagy a ROLLUP megadásakor legfeljebb 12 csoportosítási kifejezés engedélyezett.

Az ISO és az ANSI SQL-2006 GROUP BY Features támogatása

A GROUP BY záradék az SQL-2006 szabványban szereplő összes GROUP BY szolgáltatást támogatja a következő szintaxiskivételekkel:

  • A csoportosítási csoportok csak akkor engedélyezettek a GROUP BY záradékban, ha explicit CSOPORTOSÍTÁSI CSOPORTOK lista részei. Például) a standardban engedélyezett, GROUP BY Column1, (Column2, ...ColumnNde a Transact-SQL-ben nem. Transact-SQL támogatja GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)) és GROUP BY Column1, Column2, ... ColumnN, amelyek szemantikailag egyenértékűek. Ezek szemantikailag egyenértékűek az előző GROUP BY példával. Ezzel elkerülheti annak lehetőségét, hogy GROUP BY Column1, (Column2, ...ColumnNa ) nem szemantikailag egyenértékűként GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))értelmeződjön.

  • A csoportosítási csoportok nem engedélyezettek a csoportosítási csoportokon belül. Például az SQL-2006 szabványban engedélyezett, GROUP BY GROUPING SETS (A1, A2,...An, GROUPING SETS (C1, C2, ...Cn)) de a Transact-SQL-ben nem. Transact-SQL engedélyezi GROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn ) vagy GROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn) ), amelyek szemantikailag egyenértékűek az első GROUP BY példával, és egyértelműbb szintaxissal rendelkeznek.

  • A GROUP BY [ALL/DISTINCT] függvény csak oszlopkifejezéseket tartalmazó egyszerű GROUP BY záradékban engedélyezett. A CSOPORTOSÍTÁSI CSOPORTOK, A KUMULATÍV, a KOCKA, a KOCKA ÉS A KUMULATÍV SZERKEZETEK nem engedélyezettek. Az ALL az alapértelmezett, és implicit. Ez is csak a visszamenőlegesen kompatibilis szintaxisban engedélyezett.

Támogatott CSOPORTOSÍTÁSI FUNKCIÓK összehasonlítása

Az alábbi táblázat az SQL-verziók és az adatbázis-kompatibilitási szint alapján támogatott GROUP BY funkciókat ismerteti.

Feature SQL Server Integration Services AZ SQL Server 100-es vagy újabb kompatibilitási szintje SQL Server 2008 vagy újabb, 90-es kompatibilitási szinttel.
DISTINCT aggregátumok A WITH CUBE vagy a WITH ROLLUP nem támogatott. A KOCKA, a KUMULATÍV, a CSOPORTOSÍTÁSI CSOPORTOK, a KOCKA vagy a KUMULATÍV KÉSZLET esetében támogatott. Megegyezik a 100-as kompatibilitási szinttel.
Felhasználó által definiált függvény KOCKA vagy ROLLUP névvel a GROUP BY záradékban Felhasználó által definiált dbo.cube(arg1;... argN) vagy dbo.rollup(arg1,... argN) a GROUP BY záradékban engedélyezett.

Például: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);
Felhasználó által definiált dbo.cube függvény (arg1,... argN**)** vagy dbo.rollup(arg1,... argN) a GROUP BY záradékban nem engedélyezett.

Például: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);

A következő hibaüzenet jelenik meg: "Helytelen szintaxis a kocka|" kulcsszó közelében összegző".

A probléma elkerülése érdekében cserélje le a vagy dbo.cube a ([dbo].[cube]dbo.rollup2) gombra[dbo].[rollup].

A következő példa engedélyezett: SELECT SUM (x) FROM T GROUP BY [dbo].[cube](y);
Felhasználó által definiált dbo.cube függvény (arg1,... argN) vagy dbo.rollup(arg1,... argN) a GROUP BY záradékban engedélyezett

Például: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);
CSOPORTOSÍTÁSI CSOPORTOK Nem támogatott Supported Supported
CUBE Nem támogatott Supported Nem támogatott
ROLLUP Nem támogatott Supported Nem támogatott
Végösszeg, például GROUP BY () Nem támogatott Supported Supported
GROUPING_ID funkció Nem támogatott Supported Supported
CSOPORTOSÍTÁSI függvény Supported Supported Supported
KOCKÁVAL Supported Supported Supported
ROLLUP-PAL Supported Supported Supported
KOCKA vagy KUMULATÍV "duplikált" csoportosítás eltávolítása Supported Supported Supported

Examples

A. Egyszerű GROUP BY záradék használata

Az alábbi példa minden egyes SalesOrderID összeg összegét lekéri a SalesOrderDetail táblából. Ez a példa az AdventureWorkset használja.

SELECT SalesOrderID, SUM(LineTotal) AS SubTotal  
FROM Sales.SalesOrderDetail AS sod  
GROUP BY SalesOrderID  
ORDER BY SalesOrderID;  

B. GROUP BY záradék használata több táblával

Az alábbi példa az egyes City alkalmazottak számát kéri le a Address táblához EmployeeAddress csatlakoztatott táblából. Ez a példa az AdventureWorkset használja.

SELECT a.City, COUNT(bea.AddressID) EmployeeCount  
FROM Person.BusinessEntityAddress AS bea   
    INNER JOIN Person.Address AS a  
        ON bea.AddressID = a.AddressID  
GROUP BY a.City  
ORDER BY a.City;  

C. GROUP BY záradék használata kifejezéssel

Az alábbi példa az egyes évek teljes értékesítését kéri le a DATEPART függvény használatával. A listában és SELECT a záradékban is ugyanaz a GROUP BY kifejezésnek kell szerepelnie.

SELECT DATEPART(yyyy,OrderDate) AS N'Year'  
    ,SUM(TotalDue) AS N'Total Order Amount'  
FROM Sales.SalesOrderHeader  
GROUP BY DATEPART(yyyy,OrderDate)  
ORDER BY DATEPART(yyyy,OrderDate);  

D. GROUP BY záradék használata HAVING záradékkal

Az alábbi példa a záradékot használja annak HAVING meghatározására, hogy a záradékban GROUP BY létrehozott csoportok közül melyiket kell belefoglalni az eredményhalmazba.

SELECT DATEPART(yyyy,OrderDate) AS N'Year'  
    ,SUM(TotalDue) AS N'Total Order Amount'  
FROM Sales.SalesOrderHeader  
GROUP BY DATEPART(yyyy,OrderDate)  
HAVING DATEPART(yyyy,OrderDate) >= N'2003'  
ORDER BY DATEPART(yyyy,OrderDate);  

Példák: Azure Synapse Analytics és párhuzamos adattárház

E. A GROUP BY záradék alapszintű használata

Az alábbi példa az egyes napok összes értékesítésének teljes összegét keresi meg. Minden nap egy olyan sort ad vissza, amely az összes értékesítés összegét tartalmazza.

-- Uses AdventureWorksDW  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales FROM FactInternetSales  
GROUP BY OrderDateKey ORDER BY OrderDateKey;  

F. A DISTRIBUTED_AGG tipp alapszintű használata

Ez a példa a DISTRIBUTED_AGG lekérdezési tipp használatával kényszeríti a berendezést arra, hogy az összesítés végrehajtása előtt elfojtsa a táblát az CustomerKey oszlopban.

-- Uses AdventureWorksDW  
  
SELECT CustomerKey, SUM(SalesAmount) AS sas  
FROM FactInternetSales  
GROUP BY CustomerKey WITH (DISTRIBUTED_AGG)  
ORDER BY CustomerKey DESC;  

G. Szintaxisvariációk a GROUP BY függvényhez

Ha a kijelölési lista nem tartalmaz összesítéseket, a kijelölési lista minden oszlopának szerepelnie kell a GROUP BY listában. A kiválasztott listában szereplő számított oszlopok listázhatók, de nem kötelezőek a GROUP BY listában. Ezek a példák a szintaktikailag érvényes SELECT utasításokra:

-- Uses AdventureWorks  
  
SELECT LastName, FirstName FROM DimCustomer GROUP BY LastName, FirstName;  
SELECT NumberCarsOwned FROM DimCustomer GROUP BY YearlyIncome, NumberCarsOwned;  
SELECT (SalesAmount + TaxAmt + Freight) AS TotalCost FROM FactInternetSales GROUP BY SalesAmount, TaxAmt, Freight;  
SELECT SalesAmount, SalesAmount*1.10 SalesTax FROM FactInternetSales GROUP BY SalesAmount;  
SELECT SalesAmount FROM FactInternetSales GROUP BY SalesAmount, SalesAmount*1.10;  

H. GROUP BY használata több GROUP BY kifejezéssel

Az alábbi példa több GROUP BY feltételt használva csoportosítja az eredményeket. Ha minden OrderDateKey csoporton belül vannak olyan alcsoportok, amelyek megkülönböztethetők DueDateKey, a rendszer új csoportosítást határoz meg az eredményhalmazhoz.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, DueDateKey, SUM(SalesAmount) AS TotalSales   
FROM FactInternetSales
GROUP BY OrderDateKey, DueDateKey   
ORDER BY OrderDateKey;  

I. GROUP BY záradék használata HAVING záradékkal

Az alábbi példa a HAVING záradék használatával határozza meg a záradékban GROUP BY létrehozott csoportokat, amelyeket az eredményhalmaznak tartalmaznia kell. Az eredmények csak a 2004-ben vagy későbbi rendelési dátumokkal rendelkező csoportokat tartalmazzák.

-- Uses AdventureWorks  
  
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales   
FROM FactInternetSales  
GROUP BY OrderDateKey   
HAVING OrderDateKey > 20040000   
ORDER BY OrderDateKey;  

Lásd még:

GROUPING_ID (Transact-SQL)
CSOPORTOSÍTÁS (Transact-SQL)
VÁLASZT (Transact-SQL)
SELECT záradék (Transact-SQL)