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
Egy SELECT utasítási 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 az egyes csoportokon. Az SELECT utasítás minden csoporthoz egy sort ad vissza.
Syntax
Transact-SQL szintaxis konvenciók
ISO-kompatibilis szintaxis az SQL Serverhez és az Azure SQL Database-hez:
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 ] )
Az SQL Server és az Azure SQL Database nem ISO-kompatibilis szintaxisa (csak visszamenőleges kompatibilitás esetén):
GROUP BY {
ALL column-expression [ , ...n ]
| column-expression [ , ...n ] WITH { CUBE | ROLLUP }
}
Az Azure Synapse Analytics szintaxisa:
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
| ROLLUP ( <group_by_expression> [ , ...n ] )
} [ , ...n ]
Az Analytics Platform System (PDW) szintaxisa:
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 szerepelnie kell az FROMSELECT utasítás záradékában, de nem kell megjelennie a SELECT listában.
Érvényes kifejezésekért tekintse meg a kifejezést.
Az oszlopnak meg kell jelennie az FROMSELECT utasítás záradékában, de nem szükséges szerepelnie a SELECT listában. Ha azonban a lista nem összesítő kifejezésében használja, minden táblát vagy nézetoszlopot GROUP BY fel kell vennie a <select> listában.
GROUP BY options
Az alábbi lehetőségek kiterjesztik az alapszintű GROUP BY záradékot a hierarchikus összesítés, a többdimenziós összegzés, az egyéni csoportosítási kombinációk és a platformspecifikus végrehajtási viselkedések támogatására. A lekérdezések ezekkel a beállításokkal részösszegeket és végösszegeket hozhatnak létre egyetlen logikai műveletben.
ÖSSZESÍTÉS ( <group_by_expression> [ , ... n ] )
Hierarchikus részösszegeket hoz létre a felsorolt oszlopokhoz és egy végső végösszeget (például,
(a,b,c),(a,b),(a)).()Használja a részletezési jelentésekhez, példáula negyedéves>hónaphoz>.KOCKA ( <group_by_expression> [ , ... n ] )
A megadott oszlopok összes kombinációját (a teljes 2^n rácsot) és a végösszeget hozza létre. Használja többdimenziós elemzéshez minden szeleten.
CSOPORTOSÍTÁSI CSOPORTOK ( <grouping_set> [ , ... n ] )
Meghatározza a számítás pontos csoportosítását (beleértve
()a végösszeget is) egy menetben. Ez a beállítás funkcionálisan hasonlít többUNION ALLGROUP BYlekérdezésre, de együtt optimalizálva.() (üres csoportosítási csoport)
Rövidítés csak az összes sor végösszegének kiszámításához. Használja egyedül, mint vagy
GROUP BY ()belülGROUPING SETS.ALL oszlopkifejezés [ , ... n ](nem ISO; visszamenőleges kompatibilitás)
Az összes nem összesített kijelölési elem alapján történő csoportosítás rövidítése. Megtartva a kompatibilitás érdekében; rendelkezésre állása és szemantikája eltérő.
oszlopkifejezés [ , ... n ] WITH { KOCKA | 'ROLLUP }(örökölt űrlap)
Régebbi, nem ISO szintaxis, amely egyenértékű vagy
GROUP BY CUBE(...)GROUP BY ROLLUP(...). Csak a visszamenőleges kompatibilitás támogatott. Ha lehetséges, használja az ISO-alklámokat.WITH (DISTRIBUTED_AGG)
Tippek az aggregációk elosztott végrehajtásához egyetlen oszlop szerinti csoportosításkor. Az Azure Synapse Analytics dedikált SQL-készletei és az Analytics Platform System (PDW) az egyetlen platform, amely támogatja ezt a lehetőséget.
GROUP BY oszlopkifejezés [ ,... n ]
SELECT Az utasítás eredményeit egy vagy több oszlopkifejezések listájában szereplő értékek szerint csoportosítja.
Ez a lekérdezés például létrehoz egy táblát Sales , amelynek oszlopai az Region, Territoryés Sales. Négy sort szúr be, és két sornak van egyező értékeRegion.Territory
CREATE TABLE Sales
(
Region VARCHAR (50),
Territory VARCHAR (50),
Sales INT
);
GO
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áblázat a következő sorokat tartalmazza:
| Region | Terület | 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 Region és Territory visszaadja az értékek összesítését.
SELECT Region,
Territory,
SUM(sales) AS TotalSales
FROM Sales
GROUP BY Region, Territory;
A lekérdezés eredménye három sorból áll, mivel három értékkombináció van a következőhöz Region : és Territory. Kanada TotalSales és Brit Columbia esetében a két sor összege.
| Region | Terület | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Brit Columbia | 500 |
| Egyesült Államok | Montana | 100 |
A benne lévő GROUP BY oszlopkifejezés nem tartalmazhatja a következőket:
- A listában definiált
SELECToszlop aliasa. Használhat oszlop aliast a záradékbanFROMdefiniá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 például használhatja és
SUBSTRING()használhatjaCAST()a . Ez a szabály a záradékban lévőHAVINGkifejezé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 lekérdezés a 144-et adja vissza.
- Oszlop indexelt nézetben.
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;
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összegek és végösszegekké összegezi . A csoportok létrehozásakor jobbról balra halad, csökkentve a csoportosítás és az összesítés oszlopkifejezéseinek számát.
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 a következő 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 (Az értékekkel rendelkező
NULLcsoport 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 alapszintű GROUP BYhelyett.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory);
A lekérdezés eredménye ugyanazokkal az összesítésekkel rendelkezik, mint az alapszintűGROUP BY.ROLLUP Emellett részösszegeket is létrehoz a régiók minden értékéhez. Végül az összes sor végösszegét adja meg. Az eredmény így néz ki:
| Region | Terület | 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 ()
GROUP BY CUBE csoportokat hoz létre az oszlopok összes lehetséges kombinációjához. Ebben GROUP BY CUBE (a, b)az esetben az eredmények csoportokba vannak beszedve az , (a, b)és (NULL, b)(a, NULL)az (NULL, NULL)egyedi értékekhez.
Az előző példák tábláját használva ez a kód futtat egy GROUP BY CUBE műveletet a régión és a területen.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE(Region, Territory);
A lekérdezés eredménye a , (Region, Territory), (NULL, Territory)és (Region, NULL). egyedi értékek (NULL, NULL)csoportjait tartalmaz. Az eredmények a következőképpen néznek ki:
| Region | Terület | 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 GROUPING SETS beállítás több GROUP BY záradékot egyesít egy GROUP BY záradékkal. Az eredmények ugyanazok, mint UNION ALL a megadott csoportokban.
Például ugyanazt GROUP BY ROLLUP (Region, Territory)GROUP BY GROUPING SETS ( ROLLUP (Region, Territory)) az eredményt adja vissza.
Ha GROUPING SETS két vagy több elemből áll, az eredmények az elemek egyesítését képezik. Ez a példa a régió és a ROLLUP terület egyesítését adja CUBE vissza.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(ROLLUP(Region, Territory), CUBE(Region, Territory));
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 Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory)
UNION ALL
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE(Region, Territory);
Az SQL nem összesíti a listákhoz GROUPING SETS létrehozott ismétlődő csoportokat. Ebben az esetben GROUP BY ((), CUBE (Region, Territory))például mindkét elem egy sort ad vissza a végösszeghez, és mindkét sor megjelenik az eredményekben.
Az ISO és az ANSI SQL-2006 GROUP BY funkcióinak támogatása
A GROUP BY záradék az SQL-2006 szabványban szereplő összes GROUP BY funkciót támogatja a következő szintaxiskivételekkel:
A csoportosítási csoportok csak akkor engedélyezettek a
GROUP BYzáradékban, ha explicit lista részeiGROUPING SETS. Például a standardban engedélyezett,GROUP BY Column1, (Column2, ...ColumnN)de 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 a záradékok szemantikailag egyenértékűek az előzőGROUP BYpéldával. Ez a korlátozás elkerüli azt a lehetőséget, hogyGROUP BY Column1, (Column2, ...ColumnN)a szemantikailag nem egyenértékűként értelmezhető félreérthető legyenGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)).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 BYpéldával, és világosabb szintaxissal rendelkeznek.
CSOPORTOSÍTÁS ()
Megadja az üres csoportot, amely a végösszeget hozza létre. Ez a csoport a GROUPING SET. Ez az utasítás például az egyes régiók teljes értékesítését adja meg, majd az összes régió végösszegét adja meg.
SELECT Region,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(Region, ());
GROUP BY ALL oszlopkifejezés [ ,... n ]
Alkalmazható: SQL Server és Azure SQL Database
Note
Ezt a szintaxist csak a visszamenőleges kompatibilitás érdekében használja. 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.
Meghatározza, hogy az összes csoportot belefoglalja-e 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, az összesítéshez tartoznak NULL .
GROUP BY ALL:
- A távoli táblákhoz hozzáférő lekérdezések nem támogatottak, ha a lekérdezésben egy záradék is
WHEREszerepel. - A FILESTREAM attribútummal rendelkező oszlopok meghiúsulnak.
Az ISO és az ANSI SQL-2006 GROUP BY funkcióinak támogatása
A GROUP BY záradék az SQL-2006 szabványban szereplő összes GROUP BY funkciót támogatja a következő szintaxiskivételekkel:
- Csak olyan alapszintű
GROUP BYzáradékot használhatGROUP BY ALL,GROUP BY DISTINCTamely oszlopkifejezéseket tartalmaz. Nem használhatja őket aGROUPING SETS,ROLLUP, ,CUBE,WITH CUBEvagyWITH ROLLUPszerkezetekkel.ALLaz alapértelmezett és implicit. Csak a visszamenőlegesen kompatibilis szintaxisban használhatja.
GROUP BY oszlopkifejezés [ ,... n ] WITH { CUBE | ÖSSZESÍTÉS }
Alkalmazható: SQL Server és Azure SQL Database
Note
Ezt a szintaxist csak a visszamenőleges kompatibilitás érdekében használja. 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 lekérdezési tippet csak DISTRIBUTED_AGG egy oszlopban használhatja a GROUP BY záradékban. A lekérdezés befejezése után az újraterjesztett tábla el lesz ejtve. Az eredeti tábla nem módosul.
Note
A DISTRIBUTED_AGG lekérdezési tipp visszamenőleges kompatibilitást biztosít a korábbi Analytics Platform System (PDW) verziókkal, és nem javítja a legtöbb lekérdezés teljesítményét. 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.
Megjegyzések
A GROUP BY működése a SELECT utasítással
SELECT Lista:
- Vektoraggregátumok. Ha összesítő függvényeket tartalmaz a
SELECTlistában,GROUP BYminden csoporthoz kiszámít egy összegző értéket. Ezeket a függvényeket vektor aggregátumoknak nevezzük. - Különálló aggregátumok. Az összesítések
AVG(DISTINCT <column_name>),COUNT(DISTINCT <column_name>)ésSUM(DISTINCT <column_name>)a velükROLLUPvaló munka ,CUBEésGROUPING SETS.
WHERE klauzula:
- Az SQL eltávolítja azokat a sorokat, amelyek nem felelnek meg a
WHEREzáradékban foglalt feltételeknek, mielőtt bármilyen csoportosítási műveletet végrehajtanának.
HAVING klauzula:
- Az SQL a
HAVINGzáradékkal szűri a csoportokat az eredményhalmazban.
ORDER BY klauzula:
-
ORDER BYA záradék használatával rendezheti az eredményhalmazt. AGROUP BYzáradék nem rendezi az eredményhalmazt.
NULL értékek:
- Ha egy csoportosítási oszlop értékeket tartalmaz
NULL, az adatbázismotor az összesNULLértéket egyenlőként kezeli, és egyetlen csoportba gyűjti őket.
Korlátozások
A következőkre vonatkozik: SQL Server és Azure Synapse Analytics
Az GROUP BY olyan záradékok esetében, amelyek a kifejezések ROLLUPmaximális számát használjákCUBE, GROUPING SETS32. 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 csoportból áll.
Az alábbi példa 4097 (212 + 1) csoportosítási csoportot hoz létre, majd meghiúsul.
GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b)Az alábbi példa 4097 (212 + 1) csoportot hoz létre, majd 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 visszamenőlegesen kompatibilis szintaxist használja. 8192 (213) csoportosítási csoportot hoz létre, majd meghiúsul.
GROUP BY CUBE (a1, ..., a13) GROUP BY a1, ..., a13 WITH CUBEAz olyan visszamenőlegesen kompatibilis
GROUP BYzáradékok esetében, amelyek nem tartalmazzákCUBEazROLLUPGROUP BYoszlopméreteket, az összesített oszlopokat és a lekérdezésben érintett összesített értékeket, korlátozzák az elemek számátGROUP BY. Ez a korlát a köztes lekérdezési eredményeket tartalmazó köztes munkatáblán 8060 bájtos korlátból származik. Legfeljebb 12 csoportosítási kifejezést használhat a megadottCUBEvagyROLLUPa .
A támogatott GROUP BY funkciók összehasonlítása
Az alábbi táblázat azokat a funkciókat ismerteti, amelyeket a GROUP BY különböző termékek támogatnak.
| Feature | SQL Server Integration Services | SQL Server 1 |
|---|---|---|
DISTINCT Aggregátumok |
Nem támogatott vagy WITH CUBEWITH ROLLUP. |
Támogatott a WITH CUBE, WITH ROLLUP, GROUPING SETS, CUBEvagy ROLLUP. |
Felhasználó által definiált függvény a CUBE záradékban vagy ROLLUP névvel GROUP BY |
A felhasználó által definiált függvény dbo.cube(<arg1>, ...<argN>) vagy dbo.rollup(<arg1>, ...<argN>) a GROUP BY záradék megengedett.Például: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
A felhasználó által definiált függvény dbo.cube (<arg1>, ...<argN>) vagy dbo.rollup(<arg1>, ...<argN>) a GROUP BY záradék nem engedélyezett.Például: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);Az SQL Server a 2. hibaüzenetet adja vissza. 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); |
GROUPING SETS |
Nem támogatott | Supported |
CUBE |
Nem támogatott | Supported |
ROLLUP |
Nem támogatott | Supported |
Végösszeg, például GROUP BY() |
Nem támogatott | Supported |
GROUPING_ID függvény |
Nem támogatott | Supported |
GROUPING függvény |
Supported | Supported |
WITH CUBE |
Supported | Supported |
WITH ROLLUP |
Supported | Supported |
WITH CUBE vagy WITH ROLLUP "duplikált" csoportosítás eltávolítása |
Supported | Supported |
1Az adatbázis kompatibilitási szintje 100- vagy újabb.
2 A visszaadott hibaüzenet a következő: Incorrect syntax near the keyword 'cube'|'rollup'.
Examples
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. Alapszintű 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) AS 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. Ugyanazt a kifejezést kell szerepeltetnie a listában és SELECT a GROUP BY záradékban is.
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 GROUP BY záradékban létrehozott csoportok mely csoportok legyenek belefoglalva 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 and Analytics Platform System (PDW)
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. A lekérdezés egy sort ad vissza, amely az egyes napok összes értékesítésének ö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 tippet használja, hogy kényszerítse a berendezést arra, hogy az oszlopban CustomerKey lévő táblázatot az összesítés végrehajtása előtt elfojtsa.
-- Uses AdventureWorksDW
SELECT CustomerKey,
SUM(SalesAmount) AS sas
FROM FactInternetSales
GROUP BY CustomerKey WITH(DISTRIBUTED_AGG)
ORDER BY CustomerKey DESC;
G. A GROUP BY szintaxisváltozatai
Ha a kijelölési lista nem tartalmaz összesítést, minden oszlopot bele kell foglalnia a GROUP BY lista kijelölési listájába. A számított oszlopokat felveheti a kijelölési listába, de nem kell őket belefoglalnia a GROUP BY listába. Ezek a példák a szintaktikailag érvényes SELECT utasításokat mutatják be:
-- 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 AS SalesTax
FROM FactInternetSales
GROUP BY SalesAmount;
SELECT SalesAmount
FROM FactInternetSales
GROUP BY SalesAmount, SalesAmount * 1.10;
H. GROUP BY záradék 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 az egyes OrderDateKey csoportokon belül az érték megkülönbözteti az DueDateKey alcsoportokat, a lekérdezés ú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, amelyeknek tartalmazniuk kell az eredményhalmazt. 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;