Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
SELECT Sorgu sonucunu genellikle her grupta bir veya daha fazla toplama gerçekleştirerek satır gruplarına bölen bir deyim yan tümcesi. deyimi SELECT her grup için bir satır döndürür.
Syntax
Transact-SQL söz dizimi kuralları
SQL Server ve Azure SQL Veritabanı için ISO uyumlu söz dizimi:
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 ] )
SQL Server ve Azure SQL Veritabanı için ISO uyumlu olmayan söz dizimi (yalnızca geriye dönük uyumluluk):
GROUP BY {
ALL column-expression [ , ...n ]
| column-expression [ , ...n ] WITH { CUBE | ROLLUP }
}
Azure Synapse Analytics söz dizimi:
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
| ROLLUP ( <group_by_expression> [ , ...n ] )
} [ , ...n ]
Analiz Platformu Sistemi (PDW) söz dizimi:
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
} [ , ...n ]
Arguments
Sütun ifadesi
Sütunda bir sütun veya bir sütun üzerinde toplayıcı olmayan bir hesaplama belirtir. Bu sütun bir tabloya, türetilmiş tabloya veya görünüme ait olabilir. Sütunun deyiminin FROM yan tümcesinde SELECT görünmesi gerekir, ancak listede görünmesi SELECT gerekmez.
Geçerli ifadeler için bkz. ifade.
Sütunun deyiminin FROMSELECT yan tümcesinde görünmesi gerekir, ancak listede görünmesi SELECT gerekmez. Ancak, listedeki herhangi bir nonaggregate ifadesinde GROUP BY kullanıyorsanız, her tabloyu veya görünüm sütununu <select> listeye eklemeniz gerekir.
GROUP BY seçenekleri
Aşağıdaki seçenekler hiyerarşik toplama, çok boyutlu özetleme, özel gruplandırma bileşimleri ve platforma özgü yürütme davranışlarını desteklemek için temel GROUP BY yan tümcesini genişletir. Sorgular, tek bir mantıksal işlemde alt toplamlar ve genel toplamlar oluşturmak için bu seçenekleri kullanabilir.
ROLLUP ( <group_by_expression> [ , ... n ] )
Listelenen sütunlar ve son genel toplam (örneğin,
(a,b,c), ,(a,b)(a))()için hiyerarşik alt toplamlar oluşturur. Üç aylık>yıl> gibi detaya gitme raporları içinkullanın.KÜP ( <group_by_expression> [ , ... n ] )
Belirtilen sütunların (tam 2^n kafes) ve genel toplamın tüm birleşimlerini oluşturur. Her dilimde çok boyutlu analiz için kullanın.
GRUPLANDıRMA KÜMELERI ( <grouping_set> [ , ... n ] )
Tek bir geçişte işlem için tam gruplandırmaları (genel toplam için dahil
()) tanımlar. Bu seçenek işlevsel olarak birden çokGROUP BYsorguyaUNION ALLbenzer ancak birlikte iyileştirilmiştir.() (boş gruplandırma kümesi)
Tüm satırlarda yalnızca genel toplamı hesaplama kısaltması. olarak veya içinde
GROUPING SETStek başınaGROUP BY ()kullanın.ALL sütun-ifadesi [ , ... n ](ISO olmayan; geriye dönük uyumluluk)
Tüm toplanmamış seçme öğelerine göre gruplandırmak için kısaltma. Uyumluluk için korunur; kullanılabilirlik ve semantikler farklılık gösterir.
column-expression [ , ... n ] WITH { CUBE | 'ROLLUP }(eski form)
veya
GROUP BY ROLLUP(...)ile eşdeğerGROUP BY CUBE(...)eski, ISO olmayan söz dizimi. Yalnızca geriye dönük uyumluluk için desteklenir. Mümkün olduğunda ISO alt bileşenlerini kullanın.WITH (DISTRIBUTED_AGG)
Tek bir sütuna göre gruplandırma sırasında toplamalar için dağıtılmış yürütme ipuçları. Azure Synapse Analytics ayrılmış SQL havuzları ve Analiz Platformu Sistemi (PDW) bu seçeneği destekleyen tek platformlardır.
GROUP BY sütun-ifadesi [ ,... n ]
Deyimin SELECT sonuçlarını bir veya daha fazla sütun ifadesi listesindeki değerlere göre gruplandırın.
Örneğin, bu sorgu , ve sütunlarını Salesiçeren bir Region tablo Territoryoluşturur. Sales Dört satır ekler ve satırlardan ikisi ve Territoryiçin Region eşleşen değerlere sahiptir.
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);
Tablo Sales şu satırları içerir:
| Region | Bölge | Sales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britanya Kolumbiyası | 200 |
| Canada | Britanya Kolumbiyası | 300 |
| United States | Montana | 100 |
Bu sonraki sorgu, değerlerin her birleşimi için gruplandırılır Region ve Territory toplamını döndürür.
SELECT Region,
Territory,
SUM(sales) AS TotalSales
FROM Sales
GROUP BY Region, Territory;
ve Regioniçin Territory üç değer bileşimi olduğundan sorgu sonucunun üç satırı vardır.
TotalSales Kanada ve Britanya Kolumbiyası için iki satırın toplamıdır.
| Region | Bölge | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britanya Kolumbiyası | 500 |
| United States | Montana | 100 |
içindeki GROUP BY sütun ifadesi aşağıdakileri içeremez:
- Listede tanımladığınız
SELECTbir sütun diğer adı. Yan tümcesindeFROMtanımlanan türetilmiş bir tablo için sütun diğer adı kullanabilir. -
Metin, ntext veya resim türünde bir sütun. Ancak, geçerli bir veri türü değeri döndüren bir işlev için bağımsız değişken olarak metin,ntext veya görüntü sütununu kullanabilirsiniz. Örneğin, ifade ve
SUBSTRING()kullanabilirCAST(). Bu kural yan tümcesindekiHAVINGifadeler için de geçerlidir. - xml veri türü yöntemleri. Xml veri türü yöntemlerini kullanan kullanıcı tanımlı bir işlev içerebilir. Xml veri türü yöntemlerini kullanan hesaplanan bir sütun içerebilir.
- Bir alt sorgu. Sorgu 144 hatasını döndürür.
- Dizinli görünümden bir sütun.
Aşağıdaki deyimlere izin verilir:
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şağıdaki deyimlere izin verilmez:
SELECT ColumnA,
ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
SELECT ColumnA + constant + ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
TOPLAMAYA GÖRE GRUPLANDıR ()
Sütun ifadelerinin her birleşimi için bir grup oluşturur. Buna ek olarak, sonuçları alt toplamlara ve genel toplamlara yuvarlar. Grupları oluşturduğunda, gruplandırma ve toplamalar için sütun ifadelerinin sayısını azaltarak sağdan sola doğru hareket eder.
Sütun sırası çıkışı etkiler ROLLUP ve sonuç kümesindeki satır sayısını etkileyebilir.
Örneğin, GROUP BY ROLLUP (col1, col2, col3, col4) aşağıdaki listelerde sütun ifadelerinin her birleşimi için gruplar oluşturur:
- col1, col2, col3, col4
- col1, col2, col3, NULL
- col1, col2, NULL, NULL
- col1, NULL, NULL, NULL
- NULL, NULL, NULL, NULL (Değerleri içeren
NULLgrup genel toplamdır)
Önceki örnekteki tabloyu kullanarak, bu kod temel GROUP BYbir yerine bir GROUP BY ROLLUP işlem çalıştırır.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory);
Sorgu sonucu, olmadan ROLLUPtemel GROUP BY ile aynı toplamalara sahiptir. Buna ek olarak, Region değerinin her değeri için alt toplamlar oluşturur. Son olarak, tüm satırlar için genel bir toplam verir. Sonuç şöyle görünür:
| Region | Bölge | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britanya Kolumbiyası | 500 |
| Canada | NULL | 600 |
| United States | Montana | 100 |
| United States | NULL | 100 |
| NULL | NULL | 700 |
KÜBÜNE GÖRE GRUPLANDıR ()
GROUP BY CUBE tüm olası sütun bileşimleri için gruplar oluşturur. içinGROUP BY CUBE (a, b), sonuçlar benzersiz , , (a, b)(NULL, b)ve (a, NULL)değerleri (NULL, NULL)için gruplara sahiptir.
Bu kod, önceki örneklerde yer alan tabloyu kullanarak Region ve Territory üzerinde bir GROUP BY CUBE işlem çalıştırır.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE(Region, Territory);
Sorgu sonucunda benzersiz , , (Region, Territory)(NULL, Territory)ve (Region, NULL)değerleri (NULL, NULL)için gruplar bulunur. Sonuçlar şöyle görünür:
| Region | Bölge | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| NULL | Alberta | 100 |
| Canada | Britanya Kolumbiyası | 500 |
| NULL | Britanya Kolumbiyası | 500 |
| United States | Montana | 100 |
| NULL | Montana | 100 |
| NULL | NULL | 700 |
| Canada | NULL | 600 |
| United States | NULL | 100 |
GRUPLANDıRMA KÜMESİNE GÖRE GRUPLANDıR ()
seçeneği GROUPING SETS birden çok GROUP BY yan tümceyi tek yan GROUP BY tümcede birleştirir. Sonuçlar, belirtilen gruplarda kullanmakla UNION ALL aynıdır.
Örneğin, GROUP BY ROLLUP (Region, Territory) aynı GROUP BY GROUPING SETS ( ROLLUP (Region, Territory)) sonuçları döndür.
İki veya daha fazla öğe olduğunda GROUPING SETS , sonuçlar öğelerin birleşimidir. Bu örnek, Region ve Territory için ve ROLLUP sonuçlarının CUBE birleşimini döndürür.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(ROLLUP(Region, Territory), CUBE(Region, Territory));
Sonuçlar, iki GROUP BY deyimin birleşimini döndüren bu sorguyla aynıdır.
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, liste için oluşturulan yinelenen grupları birleştirmez GROUPING SETS . Örneğin, içinde GROUP BY ((), CUBE (Region, Territory))her iki öğe de genel toplam için bir satır döndürür ve her iki satır da sonuçlarda görünür.
ISO ve ANSI SQL-2006 GROUP BY özellikleri desteği
GROUP BY yan tümcesi, SQL-2006 standardına dahil olan tüm GROUP BY özellikleri aşağıdaki söz dizimi özel durumlarıyla destekler:
Açık
GROUP BYbir listenin parçası olmadığı sürece yan tümcesindeGROUPING SETSgruplandırma kümelerine izin verilmez. Örneğin,GROUP BY Column1, (Column2, ...ColumnN)standart olarak izin verilir, ancak Transact-SQL'de izin verilmez. Transact-SQL, ve 'yi desteklerGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))GROUP BY Column1, Column2, ... ColumnN. Bu yan tümceler, öncekiGROUP BYörnektekine eşdeğerdir. Bu kısıtlama, olarak yanlış yorumlanabilecekGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))ve diğer açıdan eşdeğer olmayan bir olasılıktanGROUP BY Column1, (Column2, ...ColumnN)kaçınır.Gruplandırma kümelerinin içinde gruplandırma kümelerine izin verilmez. Örneğin,
GROUP BY GROUPING SETS (A1, A2,...An, GROUPING SETS (C1, C2, ...Cn))SQL-2006 standardında izin verilir ancak Transact-SQL'de kullanılamaz. Transact-SQL, ilkGROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn)örnekle aynı olan ve daha net söz dizimine sahip olan veyaGROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn))öğesine izin verirGROUP BY.
GRUP ()
Genel toplamı oluşturan boş grubu belirtir. Bu grup, öğesinin GROUPING SETöğelerinden biri olarak kullanışlıdır. Örneğin, bu deyim her bölgenin toplam satışını verir ve ardından tüm bölgeler için genel toplamı verir.
SELECT Region,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(Region, ());
GROUP BY ALL sütun-ifadesi [ ,... n ]
Uygulanır: SQL Server ve Azure SQL Database
Note
Bu söz dizimlerini yalnızca geriye dönük uyumluluk için kullanın. Yeni geliştirme çalışmalarında bu söz dizimini kullanmaktan kaçının ve şu anda bu söz dizimini kullanan uygulamaları değiştirmeyi planlayın.
Yan tümcesindeki arama ölçütlerini WHERE karşılayıp karşılamadıklarına bakılmaksızın tüm grupların sonuçlara dahil edilip edilmeyeceğini belirtir. Arama ölçütlerini karşılamamış gruplar toplamaya yöneliktir NULL .
GROUP BY ALL:
- Sorguda bir
WHEREyan tümcesi varsa, uzak tablolara erişen sorgularda desteklenmez. - FILESTREAM özniteliğine sahip sütunlarda başarısız oluyor.
ISO ve ANSI SQL-2006 GROUP BY özellikleri desteği
GROUP BY yan tümcesi, SQL-2006 standardına dahil olan tüm GROUP BY özellikleri aşağıdaki söz dizimi özel durumlarıyla destekler:
- Ve'i
GROUP BY DISTINCTyalnızca sütun ifadeleri içeren temelGROUP BYbir yan tümcede kullanabilirsinizGROUP BY ALL. Bunları , ,GROUPING SETS,ROLLUPCUBEveyaWITH CUBEyapılarıylaWITH ROLLUPkullanamazsınız.ALLvarsayılandır ve örtükdür. Bunu yalnızca geriye dönük uyumlu söz diziminde kullanabilirsiniz.
GROUP BY sütun-ifadesi [ ,... n ] WITH { CUBE | ROLLUP }
Uygulanır: SQL Server ve Azure SQL Database
Note
Bu söz dizimlerini yalnızca geriye dönük uyumluluk için kullanın. Yeni geliştirme çalışmalarında bu söz dizimini kullanmaktan kaçının ve şu anda bu söz dizimini kullanan uygulamaları değiştirmeyi planlayın.
(DISTRIBUTED_AGG) İLE
Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
Sorgu ipucu, DISTRIBUTED_AGG toplama işlemi gerçekleştirmeden önce yüksek düzeyde paralel işleme (MPP) sistemini belirli bir sütundaki tabloyu yeniden dağıtmaya zorlar. Sorgu ipucunu yan tümcesinde DISTRIBUTED_AGG yalnızca bir sütunda GROUP BY kullanabilirsiniz. Sorgu tamamlandıktan sonra yeniden dağıtılan tablo bırakılır. Özgün tablo değiştirilmez.
Note
Sorgu DISTRIBUTED_AGG ipucu, önceki Analytics Platform Sistemi (PDW) sürümleriyle geriye dönük uyumluluk sağlar ve çoğu sorgu için performansı iyileştirmez. Varsayılan olarak, MPP toplamaların performansını artırmak için verileri gerektiği gibi yeniden dağıtır.
Açıklamalar
GROUP BY, SELECT deyimiyle nasıl etkileşim kurar?
SELECT Liste:
- Vektör agregalar. Toplama işlevlerini
SELECTlisteye eklerseniz,GROUP BYher grup için bir özet değeri hesaplar. Bu işlevler vektör toplamaları olarak bilinir. - Belirgin agregalar. , ,
AVG(DISTINCT <column_name>)COUNT(DISTINCT <column_name>)ve toplamlarıSUM(DISTINCT <column_name>),ROLLUPveCUBEileGROUPING SETSçalışır.
WHERE yan tümcesi:
- SQL, herhangi bir gruplandırma işlemi gerçekleştirmeden önce yan tümcesindeki
WHEREkoşulları karşılamayen satırları kaldırır.
HAVING yan tümcesi:
- SQL, sonuç kümesindeki
HAVINGgrupları filtrelemek için yan tümcesini kullanır.
ORDER BY yan tümcesi:
-
ORDER BYSonuç kümesini sıralamak için yan tümcesini kullanın.GROUP BYyan tümcesi sonuç kümesini sıralamaz.
NULL değerleri:
- Gruplandırma sütunu değerler içeriyorsa
NULL, Veritabanı Altyapısı tümNULLdeğerleri eşit olarak değerlendirir ve bunları tek bir grupta toplar.
Sınırlamalar
Şunlar için geçerlidir: SQL Server ve Azure Synapse Analytics
, GROUP BYveya ROLLUPkullanan CUBEbir GROUPING SETS yan tümce için en fazla ifade sayısı 32'dir. Grup sayısı üst sınırı 4.096'dır (212). Yan tümcesinde GROUP BY 4.096'dan fazla grup olduğundan aşağıdaki örnekler başarısız olur.
Aşağıdaki örnek 4.097 (212 + 1) gruplandırma kümesi oluşturur ve sonra başarısız olur.
GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b)Aşağıdaki örnek 4.097 (212 + 1) grup oluşturur ve sonra başarısız olur. Hem hem de
CUBE ()()gruplandırma kümesi genel bir toplam satırı oluşturur ve yinelenen gruplandırma kümeleri ortadan kaldırılamaz.GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())Bu örnekte geriye dönük uyumlu söz dizimi kullanılır. 8.192 (213) gruplandırma kümesi oluşturur ve sonra başarısız olur.
GROUP BY CUBE (a1, ..., a13) GROUP BY a1, ..., a13 WITH CUBEveya
ROLLUPGROUP BYiçermeyenCUBEgeriye dönük uyumluGROUP BYyan tümceler için sütun boyutları, toplanan sütunlar ve sorguda yer alan toplama değerleri öğe sayısınıGROUP BYsınırlar. Bu sınır, ara sorgu sonuçlarını tutan ara çalışma tablosundaki 8.060 bayt sınırından kaynaklanır. veyaROLLUPbelirtirkenCUBEen fazla 12 gruplandırma ifadesi kullanabilirsiniz.
Desteklenen GROUP BY özelliklerinin karşılaştırması
Aşağıdaki tabloda farklı ürünlerin desteklediği özellikler açıklanmaktadır GROUP BY .
| Feature | SQL Server Integration Services | SQL Server 1 |
|---|---|---|
DISTINCT Toplayan |
veya WITH CUBEiçin WITH ROLLUP desteklenmez. |
, , WITH CUBE, WITH ROLLUPGROUPING SETSveya CUBEiçin ROLLUPdesteklenir. |
Yan tümcesinde CUBE veya ROLLUP adında kullanıcı tanımlı işlev GROUP BY |
Kullanıcı tanımlı işleve dbo.cube(<arg1>, ...<argN>) veya dbo.rollup(<arg1>, ...<argN>) yan tümcesine GROUP BY izin verilir.Örneğin: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
Kullanıcı tanımlı işleve dbo.cube (<arg1>, ...<argN>) veya dbo.rollup(<arg1>, ...<argN>) yan tümcesine GROUP BY izin verilmez.Örneğin: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);SQL Server bir hata iletisi döndürür 2. Bu sorunu önlemek için veya ile dbo.cube[dbo].[cube]dbo.rollupdeğiştirin.[dbo].[rollup]Aşağıdaki örne izin verilir: SELECT SUM (x) FROM T GROUP BY [dbo].[cube](y); |
GROUPING SETS |
Desteklenmez | Supported |
CUBE |
Desteklenmez | Supported |
ROLLUP |
Desteklenmez | Supported |
Genel toplam, örneğin GROUP BY() |
Desteklenmez | Supported |
GROUPING_ID fonksiyon |
Desteklenmez | Supported |
GROUPING fonksiyon |
Supported | Supported |
WITH CUBE |
Supported | Supported |
WITH ROLLUP |
Supported | Supported |
WITH CUBE veya WITH ROLLUP "yinelenen" gruplandırma kaldırma |
Supported | Supported |
1Veritabanı uyumluluk düzeyi 100 ve üzeri.
2 Döndürülen hata iletisi: Incorrect syntax near the keyword 'cube'|'rollup'.
Examples
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Temel GROUP BY yan tümcesi kullanma
Aşağıdaki örnek, tablodaki her SalesOrderID birinin toplamını SalesOrderDetail alır. Bu örnekte AdventureWorks kullanılmaktadır.
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail AS sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
B. Birden çok tabloyla GROUP BY yan tümcesi kullanma
Aşağıdaki örnek, tabloya katılan City tablolardan Address her EmployeeAddress biri için çalışan sayısını alır. Bu örnekte AdventureWorks kullanılmaktadır.
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. bir ifadeyle GROUP BY yan tümcesi kullanma
Aşağıdaki örnek işlevini kullanarak her yılın toplam satışlarını DATEPART alır. Hem liste SELECT hem de yan tümcesine aynı ifadeyi GROUP BY eklemeniz gerekir.
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 yan tümcesini HAVING yan tümcesiyle kullanma
Aşağıdaki örnekte yan tümcesinde HAVING oluşturulan grupların GROUP BY sonuç kümesine eklenmesi gerektiğini belirtmek için yan tümcesi kullanılır.
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);
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
E. GROUP BY yan tümcesinin temel kullanımı
Aşağıdaki örnek, her gündeki tüm satışların toplam tutarını bulur. Sorgu, her gün için tüm satışların toplamını içeren bir satır döndürür.
-- Uses AdventureWorksDW
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
F. DISTRIBUTED_AGG ipucunun temel kullanımı
Bu örnekte, toplama işlemi gerçekleştirilmeden önce aleti sütundaki CustomerKey tabloyu karıştırmaya zorlamak için DISTRIBUTED_AGG sorgu ipucu kullanılır.
-- Uses AdventureWorksDW
SELECT CustomerKey,
SUM(SalesAmount) AS sas
FROM FactInternetSales
GROUP BY CustomerKey WITH(DISTRIBUTED_AGG)
ORDER BY CustomerKey DESC;
G. GROUP BY için söz dizimi varyasyonları
Seçme listesinde toplama olmadığında, her sütunu listedeki seçme listesine GROUP BY eklemeniz gerekir. Hesaplanan sütunları seçme listesine ekleyebilirsiniz, ancak bunları GROUP BY listeye eklemeniz gerekmez. Bu örneklerde söz dizimsel olarak geçerli SELECT deyimler gösterilir:
-- 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. Birden çok GROUP BY ifadesiyle GROUP BY yan tümcesi kullanma
Aşağıdaki örnek, sonuçları birden çok GROUP BY ölçüt kullanarak gruplar. Her OrderDateKey grubun içinde değerin farklılaştırdığı DueDateKey alt gruplar varsa, sorgu sonuç kümesi için yeni bir gruplandırma tanımlar.
-- Uses AdventureWorks
SELECT OrderDateKey,
DueDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, DueDateKey
ORDER BY OrderDateKey;
I. GROUP BY yan tümcesini HAVING yan tümcesiyle kullanma
Aşağıdaki örnek, yan tümcesinde oluşturulan ve sonuç kümesine GROUP BY eklenmesi gereken grupları belirtmek için yan tümcesini kullanırHAVING. Yalnızca 2004 veya sonraki bir tarihte sipariş tarihleri olan gruplar sonuçlara eklenir.
-- Uses AdventureWorks
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20040000
ORDER BY OrderDateKey;