Aracılığıyla paylaş


SELECT - GROUP BY yan tümcesi (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft 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 çok GROUP BY sorguya UNION ALL benzer 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şına GROUP 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ğer GROUP 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 SELECT bir sütun diğer adı. Yan tümcesinde FROM tanı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ümcesindeki HAVING ifadeler 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 NULL grup 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 BY bir listenin parçası olmadığı sürece yan tümcesinde GROUPING SETS gruplandı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 destekler GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))GROUP BY Column1, Column2, ... ColumnN. Bu yan tümceler, önceki GROUP BY örnektekine eşdeğerdir. Bu kısıtlama, olarak yanlış yorumlanabilecek GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))ve diğer açıdan eşdeğer olmayan bir olasılıktan GROUP 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, ilk GROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn) örnekle aynı olan ve daha net söz dizimine sahip olan veya GROUP 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 WHERE yan 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 DISTINCT yalnızca sütun ifadeleri içeren temel GROUP BY bir yan tümcede kullanabilirsinizGROUP BY ALL. Bunları , , GROUPING SETS, ROLLUPCUBEveya WITH CUBE yapılarıyla WITH ROLLUPkullanamazsınız. ALL varsayı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 SELECT listeye eklerseniz, GROUP BY her 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>), ROLLUPve CUBEile GROUPING SETSçalışır.

WHERE yan tümcesi:

  • SQL, herhangi bir gruplandırma işlemi gerçekleştirmeden önce yan tümcesindeki WHERE koşulları karşılamayen satırları kaldırır.

HAVING yan tümcesi:

  • SQL, sonuç kümesindeki HAVING grupları filtrelemek için yan tümcesini kullanır.

ORDER BY yan tümcesi:

  • ORDER BY Sonuç kümesini sıralamak için yan tümcesini kullanın. GROUP BY yan tümcesi sonuç kümesini sıralamaz.

NULL değerleri:

  • Gruplandırma sütunu değerler içeriyorsa NULL , Veritabanı Altyapısı tüm NULL değ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 CUBE
    

    veya ROLLUPGROUP BY içermeyen CUBE geriye dönük uyumlu GROUP BY yan tümceler için sütun boyutları, toplanan sütunlar ve sorguda yer alan toplama değerleri öğe sayısını GROUP BY sı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. veya ROLLUPbelirtirken CUBE en 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;