Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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 CUBEA 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ámogatjaGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))ésGROUP BY Column1, Column2, ... ColumnN, amelyek szemantikailag egyenértékűek. Ezek szemantikailag egyenértékűek az előzőGROUP BYpéldával. Ezzel elkerülheti annak lehetőségét, hogyGROUP BY Column1, (Column2, ...ColumnNa ) nem szemantikailag egyenértékűkéntGROUP 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élyeziGROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn )vagyGROUP 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)