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


SELECT – GROUP BY záradék (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

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öbb UNION ALLGROUP BY leké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ül GROUPING 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 SELECT oszlop aliasa. Használhat oszlop aliast a záradékban FROM 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 például használhatja és SUBSTRING()használhatja CAST() a . Ez a szabály a záradékban lévő HAVING 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 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ő NULL csoport 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 BY záradékban, ha explicit lista részei GROUPING SETS . Például a standardban engedélyezett, GROUP BY Column1, (Column2, ...ColumnN) de 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 a záradékok szemantikailag egyenértékűek az előző GROUP BY példával. Ez a korlátozás elkerüli azt a lehetőséget, hogy GROUP BY Column1, (Column2, ...ColumnN) a szemantikailag nem egyenértékűként értelmezhető félreérthető legyen GROUP 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é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 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 WHERE szerepel.
  • 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 BY záradékot használhatGROUP BY ALL, GROUP BY DISTINCT amely oszlopkifejezéseket tartalmaz. Nem használhatja őket a GROUPING SETS, ROLLUP, , CUBE, WITH CUBEvagy WITH ROLLUP szerkezetekkel. ALL az 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 SELECT listában, GROUP BY minden 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>)és SUM(DISTINCT <column_name>) a velük ROLLUPvaló munka , CUBEés GROUPING SETS.

WHERE klauzula:

  • Az SQL eltávolítja azokat a sorokat, amelyek nem felelnek meg a WHERE záradékban foglalt feltételeknek, mielőtt bármilyen csoportosítási műveletet végrehajtanának.

HAVING klauzula:

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

ORDER BY klauzula:

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

NULL értékek:

  • Ha egy csoportosítási oszlop értékeket tartalmaz NULL , az adatbázismotor az összes NULL é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 CUBE
    

    Az olyan visszamenőlegesen kompatibilis GROUP BY záradékok esetében, amelyek nem tartalmazzák CUBE az ROLLUPGROUP BY oszlopmé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 megadott CUBE vagy ROLLUPa .

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;