Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
SELECT Klauzule příkazu, která rozdělí výsledek dotazu na skupiny řádků, obvykle provedením jedné nebo více agregací pro každou skupinu. Příkaz SELECT vrátí jeden řádek pro každou skupinu.
Syntax
Syntaxe kompatibilní se standardem ISO pro SQL Server a Azure SQL Database:
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 ] )
Syntaxe nekompatibilní se standardem ISO pro SQL Server a Azure SQL Database (pouze zpětná kompatibilita):
GROUP BY {
ALL column-expression [ , ...n ]
| column-expression [ , ...n ] WITH { CUBE | ROLLUP }
}
Syntaxe pro Azure Synapse Analytics:
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
| ROLLUP ( <group_by_expression> [ , ...n ] )
} [ , ...n ]
Syntaxe systému analytických platforem (PDW):
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
} [ , ...n ]
Arguments
sloupcový výraz
Určuje sloupec nebo neaggregované výpočty ve sloupci. Tento sloupec může patřit do tabulky, odvozené tabulky nebo zobrazení. Sloupec se musí zobrazit v FROM klauzuli SELECT příkazu, ale nemusí se v seznamu zobrazovat SELECT .
Platné výrazy najdete ve výrazu.
Sloupec se musí zobrazit v FROM klauzuli SELECT příkazu, ale nemusí se zobrazovat v SELECT seznamu. Pokud ji však použijete v libovolném výrazu GROUP BY<select> , který není v seznamu, musíte do seznamu zahrnout každou tabulku nebo sloupec zobrazení.
Možnosti GROUP BY
Následující možnosti rozšiřují základní GROUP BY klauzuli o podporu hierarchické agregace, multidimenzionálního souhrnu, vlastních kombinací seskupení a chování provádění specifických pro platformu. Dotazy můžou tyto možnosti použít k vytvoření mezisoučtů a celkových součtů v jedné logické operaci.
ROLLUP ( <group_by_expression> [ , ... n ] )
Generuje hierarchické mezisoučty pro uvedené sloupce a konečný celkový součet (například
(a,b,c),(a,b),(a),()). Můžete ho použít pro sestavy podrobné analýzy, jako jenapříklad měsíc čtvrtletí roku>>.CUBE ( <group_by_expression> [ , ... n ] )
Vytvoří všechny kombinace zadaných sloupců (plná mřížka 2^n) a celkový součet. Můžete ho použít pro vícerozměrnou analýzu v každém řezu.
SESKUPOVACÍ SADY ( <grouping_set> [ , ... n ] )
Definuje přesné seskupení pro výpočet (včetně
()celkového součtu) v jednom průchodu. Tato možnost je funkčně podobnáUNION ALLvíceGROUP BYdotazům, ale je optimalizovaná společně.(prázdná sada seskupení)
Zkratka pro výpočet pouze celkového součtu napříč všemi řádky Používejte ho samostatně jako
GROUP BY ()nebo uvnitřGROUPING SETS.ALL column-expression [ , ... n ](jiné než ISO; zpětná kompatibilita)
Zkratka pro seskupení podle všech neagregovaných vybraných položek Zachovává se kvůli kompatibilitě; dostupnost a sémantika se liší.
column-expression [ , ... n ] WITH { CUBE | 'ROLLUP }(starší formulář)
Starší syntaxe než ISO, která je ekvivalentní
GROUP BY CUBE(...)neboGROUP BY ROLLUP(...). Podporuje se pouze zpětná kompatibilita. Pokud je to možné, použijte dílčí seznamy ISO.WITH (DISTRIBUTED_AGG)
Rady distribuované spuštění agregací při seskupování podle jednoho sloupce Vyhrazené fondy SQL Azure Synapse Analytics a PDW (Analytics Platform System) jsou jediné platformy, které tuto možnost podporují.
GROUP BY column-expression [ ,... n ]
Seskupí SELECT výsledky příkazu podle hodnot v seznamu jednoho nebo více výrazů sloupce.
Tento dotaz například vytvoří Sales tabulku se sloupci pro Region, Territorya Sales. Vloží čtyři řádky a dva řádky mají odpovídající hodnoty pro Region a 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);
Tabulka Sales obsahuje tyto řádky:
| Region | Území | Sales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 200 |
| Canada | Britská Kolumbie | 300 |
| USA | Montana | 100 |
Tento další dotaz seskupí Region a Territory vrátí agregovaný součet pro každou kombinaci hodnot.
SELECT Region,
Territory,
SUM(sales) AS TotalSales
FROM Sales
GROUP BY Region, Territory;
Výsledek dotazu má tři řádky, protože existují tři kombinace hodnot pro Region a Territory. Pro Kanadu TotalSales a Britskou Kolumbii je součet dvou řádků.
| Region | Území | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| USA | Montana | 100 |
Výraz GROUP BY sloupce nemůže obsahovat:
- Alias sloupce, který definujete v
SELECTseznamu. Může použít alias sloupce pro odvozenou tabulku definovanou vFROMklauzuli. - Sloupec typu text, ntext nebo obrázek Jako argument funkce, která vrací hodnotu platného datového typu, ale můžete použít sloupec textu, ntext nebo obrázek . Výraz může například použít
SUBSTRING()aCAST(). Toto pravidlo platí také pro výrazy v klauzuliHAVING. - metody datového typu XML. Může obsahovat uživatelem definovanou funkci, která používá metody datového typu XML . Může obsahovat počítaný sloupec, který používá metody datového typu XML .
- Subquery. Dotaz vrátí chybu 144.
- Sloupec z indexovaného zobrazení
Jsou povoleny následující příkazy:
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;
Následující příkazy nejsou povolené:
SELECT ColumnA,
ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
SELECT ColumnA + constant + ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
SESKUPOVAT PODLE SOUHRNU ()
Vytvoří skupinu pro každou kombinaci výrazů sloupců. Kromě toho shrnuje výsledky do mezisoučtů a celkových součtů. Když vytvoří skupiny, přesune se zprava doleva a sníží počet výrazů sloupců pro seskupení a agregace.
Pořadí sloupců má vliv na ROLLUP výstup a může ovlivnit počet řádků v sadě výsledků.
GROUP BY ROLLUP (col1, col2, col3, col4) Například vytvoří skupiny pro každou kombinaci výrazů sloupců v následujících seznamech:
- sloupec 1, sloupec 2, sloupce 3, sloupce 4
- sloupec 1, sloupec 2, sloupec 3, NUL
- col1, col2, NULL, NULL
- sloupec1, NULL, NULL, NULL
- NULL, NULL, NULL, NULL (skupina s
NULLhodnotami je celkový součet)
Pomocí tabulky z předchozího příkladu tento kód spustí GROUP BY ROLLUP operaci místo základního GROUP BYkódu .
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory);
Výsledek dotazu má stejné agregace jako základní GROUP BY bez .ROLLUP Kromě toho vytvoří mezisoučty pro každou hodnotu oblasti. Nakonec dává celkový součet pro všechny řádky. Výsledek vypadá takto:
| Region | Území | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| Canada | NULL | 600 |
| USA | Montana | 100 |
| USA | NULL | 100 |
| NULL | NULL | 700 |
GROUP BY CUBE ()
GROUP BY CUBE vytvoří skupiny pro všechny možné kombinace sloupců. Pro GROUP BY CUBE (a, b), výsledky mají skupiny pro jedinečné hodnoty (a, b), (NULL, b), (a, NULL)a (NULL, NULL).
Pomocí tabulky z předchozích příkladů tento kód spustí GROUP BY CUBE operaci na oblasti a oblasti.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE(Region, Territory);
Výsledek dotazu obsahuje skupiny pro jedinečné hodnoty (Region, Territory), (NULL, Territory), (Region, NULL)a (NULL, NULL). Výsledky vypadají takto:
| Region | Území | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| NULL | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| NULL | Britská Kolumbie | 500 |
| USA | Montana | 100 |
| NULL | Montana | 100 |
| NULL | NULL | 700 |
| Canada | NULL | 600 |
| USA | NULL | 100 |
GROUP BY GROUPING SETS ()
Možnost GROUPING SETS kombinuje více GROUP BY klauzulí do jedné GROUP BY klauzule. Výsledky jsou stejné jako u UNION ALL zadaných skupin.
Například GROUP BY ROLLUP (Region, Territory) a GROUP BY GROUPING SETS ( ROLLUP (Region, Territory)) vrátit stejné výsledky.
Pokud GROUPING SETS obsahuje dva nebo více prvků, výsledky jsou sjednocením prvků. Tento příklad vrátí sjednocení ROLLUP a CUBE výsledky pro oblast a oblast.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(ROLLUP(Region, Territory), CUBE(Region, Territory));
Výsledky jsou stejné jako tento dotaz, který vrací sjednocení dvou GROUP BY příkazů.
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);
SQL nekonsoliduje duplicitní skupiny generované pro GROUPING SETS seznam. Například v GROUP BY ((), CUBE (Region, Territory))obou prvcích se vrátí řádek pro celkový součet a oba řádky se zobrazí ve výsledcích.
Podpora funkcí ISO a ANSI SQL-2006 GROUP BY
Klauzule GROUP BY podporuje všechny GROUP BY funkce, které jsou součástí standardu SQL-2006 s následujícími výjimkami syntaxe:
Sady seskupení nejsou v
GROUP BYklauzuli povoleny, pokud nejsou součástí explicitníhoGROUPING SETSseznamu. Například je povolena ve standardu,GROUP BY Column1, (Column2, ...ColumnN)ale ne v jazyce Transact-SQL. Transact-SQL podporujeGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))aGROUP BY Column1, Column2, ... ColumnNkteré jsou sémanticky ekvivalentní. Tyto klauzule jsou sémanticky ekvivalentní předchozímuGROUP BYpříkladu. Toto omezení zabraňuje možnosti, kteráGROUP BY Column1, (Column2, ...ColumnN)by mohla být nesprávně interpretována jakoGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)), což není sémanticky ekvivalentní.Skupiny nejsou v sadách seskupení povoleny. Například
GROUP BY GROUPING SETS (A1, A2,...An, GROUPING SETS (C1, C2, ...Cn))je povolený ve standardu SQL-2006, ale ne v jazyce Transact-SQL. Transact-SQL umožňujeGROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn)neboGROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn)), které jsou sémanticky ekvivalentní prvnímuGROUP BYpříkladu a mají jasnější syntaxi.
SKUPINA PODLE ()
Určuje prázdnou skupinu, která vygeneruje celkový součet. Tato skupina je užitečná jako jeden z prvků GROUPING SET. Tento výpis například poskytuje celkové prodeje pro každou oblast a pak celkový součet pro všechny oblasti.
SELECT Region,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(Region, ());
GROUP BY ALL column-expression [ ,... n ]
Platí na: SQL Server a Azure SQL Database
Note
Tuto syntaxi použijte pouze pro zpětnou kompatibilitu. Nepoužívejte tuto syntaxi v nové vývojové práci a naplánujte úpravy aplikací, které tuto syntaxi aktuálně používají.
Určuje, jestli se mají do výsledků zahrnout všechny skupiny bez ohledu na to, jestli splňují kritéria hledání v klauzuli WHERE . Skupiny, které nesplňují kritéria hledání, mají NULL pro agregaci.
GROUP BY ALL:
- Dotazy, které přistupují ke vzdáleným tabulkám, nejsou podporované, pokud je v dotazu také
WHEREklauzule. - Selže u sloupců, které mají atribut FILESTREAM.
Podpora funkcí ISO a ANSI SQL-2006 GROUP BY
Klauzule GROUP BY podporuje všechny GROUP BY funkce, které jsou součástí standardu SQL-2006 s následujícími výjimkami syntaxe:
- Můžete použít
GROUP BY ALLGROUP BY DISTINCTpouze základníGROUP BYklauzuli, která obsahuje výrazy sloupců. Nemůžete je použít s konstruktoremGROUPING SETS,ROLLUP,CUBEWITH CUBE, aniWITH ROLLUPkonstrukty.ALLje výchozí a je implicitní. Můžete ho použít jenom v zpětně kompatibilní syntaxi.
GROUP BY column-expression [ ,... n ] WITH { CUBE | ROLLUP }
Platí na: SQL Server a Azure SQL Database
Note
Tuto syntaxi použijte pouze pro zpětnou kompatibilitu. Nepoužívejte tuto syntaxi v nové vývojové práci a naplánujte úpravy aplikací, které tuto syntaxi aktuálně používají.
S (DISTRIBUTED_AGG)
Platí pro: Azure Synapse Analytics a Analytics Platform System (PDW)
Tip DISTRIBUTED_AGG dotazu vynutí systém MPP (Massively Parallel Processing) k redistribuci tabulky v určitém sloupci před provedením agregace. Nápovědu DISTRIBUTED_AGG dotazu můžete použít pouze u jednoho sloupce v klauzuli GROUP BY . Po dokončení dotazu se redistribuovaná tabulka zahodí. Původní tabulka se nezmění.
Note
Nápověda DISTRIBUTED_AGG k dotazu poskytuje zpětnou kompatibilitu se staršími verzemi systému PDW (Analytics Platform System) a nezlepší výkon většiny dotazů. MpP už ve výchozím nastavení redistribuuje data podle potřeby, aby se zlepšil výkon agregací.
Poznámky
Jak GROUP BY komunikuje s příkazem SELECT
SELECT Seznamu:
- Vektorové agregáty. Pokud do seznamu zahrnete agregační funkce
SELECT,GROUP BYvypočítá souhrnnou hodnotu pro každou skupinu. Tyto funkce se označují jako vektorové agregace. - Odlišné agregáty. Agregace
AVG(DISTINCT <column_name>),COUNT(DISTINCT <column_name>)aSUM(DISTINCT <column_name>)pracují sROLLUP,CUBEaGROUPING SETS.
klauzule WHERE:
- SQL před provedením jakékoli operace seskupení odebere řádky, které nesplňují podmínky v
WHEREklauzuli.
klauzule HAVING:
- SQL používá klauzuli
HAVINGk filtrování skupin v sadě výsledků.
klauzule ORDER BY:
-
ORDER BYPomocí klauzule můžete nastavit pořadí sady výsledků. KlauzuleGROUP BYneřídí sadu výsledků.
NULL hodnoty:
- Pokud seskupovací sloupec obsahuje
NULLhodnoty, databázový stroj považuje všechnyNULLhodnoty za stejné a shromáždí je do jedné skupiny.
Omezení
Platí pro: SQL Server a Azure Synapse Analytics
GROUP BY Pro klauzuli, která používá ROLLUP, CUBEnebo GROUPING SETS, maximální počet výrazů je 32. Maximální počet skupin je 4 096 (212). Následující příklady selžou, protože GROUP BY klauzule má více než 4 096 skupin.
Následující příklad vygeneruje 4 097 (212 + 1) seskupovacích sad a pak selže.
GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b)Následující příklad vygeneruje skupiny 4 097 (212 + 1) a pak selže.
CUBE ()Sada()seskupení vytvoří celkový součet řádků a duplicitních sad seskupení, ale neodstraní se.GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())Tento příklad používá zpětně kompatibilní syntaxi. Vygeneruje 8 192 (213) sad seskupení a pak selže.
GROUP BY CUBE (a1, ..., a13) GROUP BY a1, ..., a13 WITH CUBEU zpětně kompatibilních
GROUP BYklauzulí, které neobsahujíCUBEneboROLLUP,GROUP BYvelikosti sloupců, agregované sloupce a agregované hodnoty zahrnuté v dotazu omezují početGROUP BYpoložek. Tento limit vychází z limitu 8 060 bajtů v přechodné pracovní tabulce, která obsahuje výsledky zprostředkujících dotazů. Při zadáváníCUBEROLLUPnebo můžete použít maximálně 12 výrazů seskupení.
Porovnání podporovaných funkcí GROUP BY
Následující tabulka popisuje GROUP BY funkce, které různé produkty podporují.
| Feature | služba SSIS (SQL Server Integration Services) | SQL Server 1 |
|---|---|---|
DISTINCT Agregáty |
Nepodporuje se pro WITH CUBE nebo WITH ROLLUP. |
Podporováno pro WITH CUBE, , WITH ROLLUPGROUPING SETS, CUBEnebo ROLLUP. |
Uživatelem definovaná funkce s CUBE nebo ROLLUP názvem v klauzuli GROUP BY |
Uživatelem definovaná funkce dbo.cube(<arg1>, ...<argN>) nebo dbo.rollup(<arg1>, ...<argN>) v klauzuli GROUP BY je povolená.Příklad: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
Uživatelem definovaná funkce dbo.cube (<arg1>, ...<argN>) nebo dbo.rollup(<arg1>, ...<argN>) v GROUP BY klauzuli není povolená.Příklad: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);SQL Server vrátí chybovou zprávu 2. Chcete-li se vyhnout tomuto problému, nahraďte dbo.cube[dbo].[cube] za nebo dbo.rollup za [dbo].[rollup].Následující příklad je povolený: SELECT SUM (x) FROM T GROUP BY [dbo].[cube](y); |
GROUPING SETS |
Není podporováno | Supported |
CUBE |
Není podporováno | Supported |
ROLLUP |
Není podporováno | Supported |
Celkový součet, například GROUP BY() |
Není podporováno | Supported |
GROUPING_ID Funkce |
Není podporováno | Supported |
GROUPING Funkce |
Supported | Supported |
WITH CUBE |
Supported | Supported |
WITH ROLLUP |
Supported | Supported |
WITH CUBE nebo WITH ROLLUP odebrání duplicitního seskupení |
Supported | Supported |
1Úroveň kompatibility databáze 100 a vyšší.
2 Vrácená chybová zpráva: Incorrect syntax near the keyword 'cube'|'rollup'.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití základní klauzule GROUP BY
Následující příklad načte celkový součet pro každou SalesOrderID z SalesOrderDetail tabulky. V tomto příkladu se používá AdventureWorks.
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail AS sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
B. Použití klauzule GROUP BY s více tabulkami
Následující příklad načte počet zaměstnanců pro každý City z Address tabulky spojené s EmployeeAddress tabulkou. V tomto příkladu se používá AdventureWorks.
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. Použití klauzule GROUP BY s výrazem
Následující příklad načte celkové prodeje za každý rok pomocí DATEPART funkce. Do seznamu i SELECT klauzule musíte zahrnout stejný výrazGROUP BY.
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. Použití klauzule GROUP BY s klauzulí HAVING
Následující příklad používá klauzuli HAVING k určení skupin vygenerovaných v GROUP BY klauzuli by měly být zahrnuty do sady výsledků.
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říklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
E. Základní použití klauzule GROUP BY
Následující příklad najde celkovou částku pro všechny prodeje každý den. Dotaz vrátí jeden řádek obsahující součet všech prodejů za každý den.
-- Uses AdventureWorksDW
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
F. Základní použití nápovědy pro DISTRIBUTED_AGG
Tento příklad používá nápovědu k dotazu DISTRIBUTED_AGG, aby zařízení před provedením agregace vynutil náhodné prohazování tabulky ve CustomerKey sloupci.
-- Uses AdventureWorksDW
SELECT CustomerKey,
SUM(SalesAmount) AS sas
FROM FactInternetSales
GROUP BY CustomerKey WITH(DISTRIBUTED_AGG)
ORDER BY CustomerKey DESC;
G. Varianty syntaxe pro GROUP BY
Pokud seznam výběru neobsahuje žádné agregace, musíte do seznamu GROUP BY výběru zahrnout každý sloupec. Do seznamu výběru můžete zahrnout počítané sloupce, ale nemusíte je GROUP BY do seznamu zahrnout. Tyto příklady ukazují syntakticky platné SELECT příkazy:
-- 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. Použití klauzule GROUP BY s více výrazy GROUP BY
Následující příklad seskupuje výsledky pomocí více GROUP BY kritérií. Pokud v rámci každé OrderDateKey skupiny existují podskupiny, které DueDateKey hodnota rozlišuje, dotaz definuje nové seskupení sady výsledků.
-- Uses AdventureWorks
SELECT OrderDateKey,
DueDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, DueDateKey
ORDER BY OrderDateKey;
I. Použití klauzule GROUP BY s klauzulí HAVING
Následující příklad používá HAVING klauzuli k určení skupin vygenerovaných v GROUP BY klauzuli, které by měly být zahrnuty do sady výsledků. Ve výsledcích jsou zahrnuté pouze skupiny s daty objednávek v roce 2004 nebo novějším.
-- Uses AdventureWorks
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20040000
ORDER BY OrderDateKey;
Související obsah
- GROUPING_ID (Transact-SQL)
- SKUPINOVÁNÍ (Transact-SQL)
- SELECT (Transact-SQL)
- Klauzule SELECT (Transact-SQL)