Aracılığıyla paylaş


Transact-SQL () GRUBU

Seçili gruplar küme satır bir küme Özet satırları, sütunları veya deyimleri bir veya daha fazla değerlere göre.Her grup için bir satır döndürür.Toplam SELECT yan tümce işlevleri<seçin>liste yerine her grup hakkında bilgi sağlar tek tek satırlara.

GROUP BY yan tümce, ISO uyumlu bir sözdizimi ve ISO-uyumlu olmayan bir sözdizimine sahiptir.Tek bir deyim içinde yalnızca bir sözdizimi stili kullanılır.Tüm yeni çalışma için ISO uyumlu sözdizimini kullanın.Uyumlu olmayan ISO sözdizimi, geriye doğru uyumluluk için sağlanır.

Bu konuda bir GROUP BY yan tümce genel ya da basit olarak tanımlanabilir:

  • gruplandırma ayarlar, küp, ROLLUP, WITH küp veya ROLLUP ile bir genel GROUP BY yan tümce içerir.

  • Bir basit grupla yan tümce gruplandırma ayarlar, küp, ROLLUP, WITH küp veya ROLLUP ile içermez.Bir basit grupla (GROUP BY), genel toplam olarak kabul edilir.

Topic link iconTransact-SQL sözdizimi kuralları (Transact-SQL)

ISO-Compliant Syntax

GROUP BY <group by spec>

<group by spec> ::=
    <group by item> [ ,...n ]

<group by item> ::=
    <simple group by item>
    | <rollup spec>
    | <cube spec>
    | <grouping sets spec>
    | <grand total>

<simple group by item> ::=
    <column_expression>

<rollup spec> ::=
    ROLLUP ( <composite element list> )

<cube spec> ::=
    CUBE ( <composite element list> )

<composite element list> ::=
    <composite element> [ ,...n ]

<composite element> ::=
    <simple group by item>
    | ( <simple group by item list> )

<simple group by item list> ::=
    <simple group by item> [ ,...n ]

<grouping sets spec> ::=
    GROUPING SETS ( <grouping set list> )

<grouping set list> ::=
    <grouping set> [ ,...n ]

<grouping set> ::=
    <grand total>
    | <grouping set item>
    | ( <grouping set item list> )

<empty group> ::=
        ( )

<grouping set item> ::=
    <simple group by item>
    | <rollup spec>
    | <cube spec>

<grouping set item list> ::=
    <grouping set item> [ ,...n ]

Non-ISO-Compliant Syntax
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
    [ WITH { CUBE | ROLLUP } ] 
]

Bağımsız değişkenler

  • <column_expression>

    • İşifade, gruplandırma işlemi gerçekleştirilir.
  • (TOPLAMA)
    Basit grupla toplamak satırları ayrıca alt toplamak veya super-toplamak ve genel toplamak satırı oluşturur.

    Verilen grupları sayısını ifade sayısı eşittir<Bileşik bir öğe listesi>bir artı.Örneğin, aşağıdaki ifadeyi düşünün.

    SELECT a, b, c, SUM ( <expression> )
    FROM T
    GROUP BY ROLLUP (a,b,c)
    

    Her benzersiz değerleri birleşimi için bir alt toplam içeren bir satır oluşturulur(a, b, c),(a, b), ve(a).Genel toplam satırı da hesaplanır.

    Sütun sağdan sola alınır.Sütun sırasını ROLLUP, çıkış grupları etkiler ve sonuç satır sayısını etkileyebilir küme.

  • KÜP (.)
    toplamak satır grupla basit, ROLLUP super-toplamak satır ve Çapraz çizelgeleme satırları oluşturur.

    küp verir bir gruplandırma tüm PERMÜTASYON ifade için<Bileşik bir öğe listesi>.

    Olan grupları sayısı eşittir oluşturulan (2 n ), burada n = > < birleşik bir öğe listesi ifadelerde sayısı. Örneğin, aşağıdaki ifadeyi düşünün.

    SELECT a, b, c, SUM (<expression>)
    FROM T
    GROUP BY CUBE (a,b,c)
    

    Bir satırın her benzersiz değerleri birleşimi için üretilen(a, b, c),(a, b),(a, c),(b, c),(a),(b)ve(c)ile bir alt toplam için her satır ve genel toplam satırı.

    küp çıkışını sütun sırasını etkilemez.

  • GRUPLANDIRMA AYARLAR (.)
    Bir sorgudaki verileri birden çok gruplama belirtir.Yalnızca belirtilen gruplar yerine tam toplanan küme, küp veya ROLLUP ile oluşturulan toplamlar.Sonuçlar UNION ALL belirtilen grupların, eşdeğerdir.gruplandırma ayarlar tek bir öğe veya öğeler içerebilir.gruplandırma KÜMESİ gruplamaları eşdeğer küp veya ROLLUP iade olarak belirtebilirsiniz.Örnekleri için bkz:gruplandırma KÜMELERI eşdeğerleri.The <grouping set item list> can contain ROLLUP or CUBE.

  • ()
    Toplam boş grubu oluşturur.

Non-ISO uyumlu sözdizimi

  • ALL
    This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Tüm grupları ve sonuç kümelerini bile, arama koşulu WHERE yan tümcesinde belirtilen uyan tüm satırları bu içerir.ALL belirtilirse, null değerler Özet sütunları, arama koşulu karşılayan gruplara verilir.ALL küp veya ROLLUP operatörleri ile birlikte belirtilemez.

    Tüm GROUP BY olması durumunda da bir WHERE yan tümce sorguda, uzak tablo sorgularda desteklenmiyor.Tüm GROUP BY FILESTREAM özniteliğine sahip sütunlarda başarısız olur.

  • group_by_expression
    Is an expression on which grouping is performed.group_by_expression is also known as a grouping column.group_by expression can be a column or a non-aggregate expression that references a column returned by the FROM clause.Seçim listesi tanımlanmış bir sütun diğer ad ad adı belirtmek için kullanılamaz bir gruplandırma sütun.

    Not

    Sütun türütext,ntext, veimageiçinde kullanılamazgroup_by_expression.

    İçin GROUP BY yan, içermez küp veya ROLLUP sayısıgroup_by_expressionöğeleri olarak GROUP BY sütun boyutlarını, toplanan sütunlar, sınırlı ve toplamak değerlerini alan sorgu.Bu sınır, ara sorgu sonuçlarını saklamak için gerekli olan ara worktable 8,060 bayt miktarı sınırı kaynaklandığı.En çok 12 gruplandırma ifadeler küp veya ROLLUP belirtildiğinde verilir.

    xmlveri türü yöntemleri doğrudan belirtilemezgroup_by_expression.Bunun yerine, kullanıcı tanımlı bir işlev kullanan için bakınxmliçindeki yöntem yazın veya hesaplanmış bir başvuru sütun onları kullanan.

  • KÜP
    This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. GROUP BY tarafından sağlanan normal satırlara ek olarak, Özet satırları sonuç sunulan belirtir küme.GROUP BY Özet satırını her olası birleşimini grubu ve alt sonuç için döndürülen küme.Null sonucu değer olup olmadığını belirlemek için gruplandırma işlevini kullanın küme grupla Özet değerler.

    Sonuç Özet satır küme GROUP BY yan tümcesinde bulunan sütun sayısı tarafından belirlenir.Grup ve alt her olası birleşimini küp verdiği için satır sayısı, sırayı ne olursa olsun aynıdır gruplandırma sütunları belirtilir.

  • İLE TOPLAMA
    This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. GROUP BY tarafından sağlanan normal satırlara ek olarak, Özet satırları sonuç sunulan belirtir küme.Grupları arasında en yüksek gruba düşük düzeyli hiyerarşik bir sırada özetlenir.Sırayı tarafından belirlenen Grup hiyerarşisini gruplandırma sütunları belirtilir.Gruplandırma sütunların sırasını değiştirme sonucu oluşturulan satırların sayısını etkileyebilir küme.

    Important noteImportant Note:

    Farklı toplam, ortalama (farklı column_name), COUNT (DISTINCT column_name) ve toplam (farklı column_name), küp veya ROLLUP kullandığınızda desteklenmezBu kullanılıyorsa,SQL Server Database Enginebir hata iletisi verir ve iptal sorgu.

Remarks

Tablo, türetilen tablolar veya görünümler FROM yan tümcesinde sütunlar GROUP BY yan tümce ifadelerinde içerebilir.Sütunların SELECT yan tümce görüntülenmesi için gerekli değildir<seçin>liste.

Nonaggregate herhangi bir ifade tablo veya görünümü her sütunda<seçin>listesi GROUP BY listesinde eklenebilir gerekir:

  • Aşağıdaki 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 izin verilmez:

    SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA + ColumnB
    SELECT ColumnA + constant + ColumnB FROM T GROUP BY ColumnA + ColumnB.
    

toplamak işlevleri SELECT yan tümce eklenir<liste seçin>GROUP BY her grubun. Özet bir değeri hesaplarBunlar vektör toplam bilinir.

WHERE yan tümcesindeki koşulları karşılayan satırları, herhangi bir gruplandırma işlemi yapılmadan önce kaldırılır.

The HAVING clause is used with the GROUP BY clause to filter groups in the result set.

GROUP BY yan tümce sonucu sipariş küme.ORDER BY yan tümce, sonuç kümesi sıralamak için kullanın.

Varsa bir gruplandırma sütun null değerleri içeren tüm boş değerleri eşit kabul edilir ve bunlar tek bir grup olarak yerleştirilir.

GROUP BY ile diğer ad ad sürece, diğer ad ad türetilmiş bir FROM yan tümce tablodaki bir sütun adı yerine AS yan tümcesindeki sütun adını değiştirmek için kullanamazsınız.

Yinelenen gruplandırma ayarlar gruplandırma ayarlar listesinde olmayan ortadan.Yinelenen grup kümesi, bir sütun ifadesi birden fazla kez belirterek ya da GRUPLANDIRMA ayarlar listesinde küp veya ROLLUP ile oluşturulan bir sütun ifade listesi oluşturulabilir.

Farklı toplam, ortalama (farklı column_name), COUNT (DISTINCT column_name) ve toplam (farklı column_name) ROLLUP, küp ve gruplandırma ayarlar ile desteklenen

Dizinlenmiş bir görünümde ROLLUP, küp ve gruplandırma KÜMESİ belirtilemez.

GROUP BY veya HAVING kullanılamaz sütunlar hakkındantext,text, orimage.Bu sütun, SUBSTRING() ve CAST() gibi başka bir veri türünde bir değer döndüren bir işlev bağımsız değişkenleri olarak kullanılabilir.

xmlveri türü yöntemleri de doğrudan belirtilemez bir<column_expression>.Bunun yerine, kullanıcı tanımlı bir işlev kullanan için bakınxmliçindeki yöntem yazın veya hesaplanmış bir başvuru sütun onları kullanan.

GROUP BY kısıtlamaları gruplandırma ayarlar, ROLLUP ve küp

Sözdizimi kısıtlamaları

GROUP BY gruplandırma ayarlar kullanılamaz yan tümce gruplandırma KÜMELERİ listesinin bir bölümünü oldukları sürece.Örneğin,GROUP BY C1, (C2,..., Cn)izin verilmez, ancakGROUP BY GROUPING SETS (C1, (C2, ..., Cn))izin verilir.

gruplandırma kümelerini gruplandırma kümelerini içinde izin verilmez.Örneğin,GROUP BY GROUPING SETS (C1, GROUPING SETS (C2, C3))izin verilmez.

ISO olmayan - tüm, WITH küp ve WITH ROLLUP anahtar sözcükleri bir GROUP BY izin yan tümce ROLLUP, küp veya gruplandırma ayarlar anahtar sözcükler.

Boyut sınırlamaları

Basit Grupla için ifadeleri sayısına bir sınır yoktur.

ROLLUP, küp veya GRUPLANDIRMA ayarlar'ı kullanan bir GROUP BY yan tümce için ifadeleri sayısı 32 ve oluşturulabilir gruplandırma kümelerinin sayısı 4096 (2 12 ). Aşağıdaki örneklerde başarısız GROUP BY yan tümce çok karmaşık:

  • Aşağıdaki örneklerde 8192 oluşturur (2 13 ) ayarlar. gruplandırma

    GROUP BY CUBE (a1, ..., a13) 
    GROUP BY a1, ..., a13 WITH CUBE 
    
  • 4097 Aşağıdaki örnek oluşturur (2 12 + 1) ayarlar. gruplandırma

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )
    
  • Aşağıdaki örnekte de 4097 oluşturur (2 12 + 1) ayarlar. gruplandırma Her ikiCUBE ()ve()üreten bir genel toplam satırı kümesi gruplandırma ve yinelenen grup kümesi değil ortadan.

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())
    

ISO ve ANSI SQL-2006 GROUP BY özellikler için destek

SQL Server 2008SQL 2006 standardı aşağıdaki sözdizimini istisnalar dahil edilen tüm grupla özellikleri destekler:

  • GROUP BY gruplandırma ayarlar kullanılamaz yan tümce açık GROUPING ayarlar listesinin bir parçası oldukları sürece.For example, GROUP BY Column1, (Column2, ...ColumnN) is allowed in the standard but not in SQL Server.GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)) or GROUP BY Column1, Column2, ... ColumnN is allowed.Bunlar semantically eşdeğer öncekiGROUP BYörnek.Bu olasılığını önlemek için ise,GROUP BY Column1, (Column2, ...ColumnN) olarak misinterpreted GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)).Bu semantically eşdeğer değildir.

  • Grup kümesi kümeleri gruplandırma içinde izin verilmez.For example, GROUP BY GROUPING SETS (A1, A2,…An, GROUPING SETS (C1, C2, ...Cn)) is allowed in the SQL-2006 standard but not in SQL Server.SQL Server 2008 allows GROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn ) or GROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn) ).Bu örnek, ilk grupla örneği semantically eşdeğerdir ve daha net bir sözdizimine sahiptir.

  • GROUP BY [ALL/farklı] verilmez bir genel GROUP BY yan tümce veya gruplandırma ayarlar, ROLLUP, küp, WITH küp veya ROLLUP ile yapıları.ALL varsayılan ve kapalı.

Desteklenen GROUP BY özellikleri karşılaştırması

Aşağıdaki tabloda açıklanmıştır grupla özellikleri desteklenen sürüm temel alarakSQL Serverve veritabanı uyumluluk düzey.

Özellik

SQL Server 2005 Tümleştirme Hizmetleri

SQL Server 2008 uyumluluk düzey 100

SQL Server 2008 uyumluluk düzey 90 veya daha önceki

DISTINCT toplam

WITH küp veya ROLLUP ile desteklenmez.

WITH küp ROLLUP, gruplandırma ayarlar, küp veya ROLLUP ile desteklenen.

AynıSQL Server 2008uyumluluk düzeyini 100.

Kullanıcı tanımlı işlev adıyla küp veya ROLLUP GROUP BY yan tümce

User-defined function dbo.cube(arg1,...argN) or dbo.rollup(arg1,...argN) in the GROUP BY clause is allowed.

Örneğin:

SELECT SUM (x)
FROM T 
GROUP BY dbo.cube(y) 

User-defined function dbo.cube (arg1,...argN) or dbo.rollup(arg1,...argN) in the GROUP BY clause is not allowed.

Örneğin:

SELECT SUM (x)
FROM T 
GROUP BY dbo.cube(y) 

Aşağıdaki hata iletisini verdi: "Anahtar sözcüğü 'küp' yakınında yanlış sözdizimi | 'toplama'."

Bu sorunu önlemek için değiştirmedbo.cubeile[dbo].[cube]ordbo.rollupile[dbo].[rollup].

Aşağıdaki örnek verilir:

SELECT SUM (x)
FROM T 
GROUP BY [dbo].[cube](y)

User-defined function dbo.cube (arg1,...argN) or dbo.rollup(arg1,...argN) in the GROUP BY clause is allowed

Örneğin:

SELECT SUM (x)
FROM T 
GROUP BY dbo.cube(y)

GRUPLANDIRMA AYARLAR

desteklenmez

Desteklenir

Desteklenir

KÜP

desteklenmez

Desteklenir

desteklenmez

TOPLAMA

desteklenmez

Desteklenir

desteklenmez

GROUP BY () gibi genel toplam

desteklenmez

Desteklenir

Desteklenir

GROUPING_ID işlev

desteklenmez

Desteklenir

Desteklenir

gruplandırma işlev

Desteklenir

Desteklenir

Desteklenir

KÜP

Desteklenir

Desteklenir

Desteklenir

İLE TOPLAMA

Desteklenir

Desteklenir

Desteklenir

küp veya ile "çift" ROLLUP kaldırma gruplandırma

Desteklenir

Desteklenir

Desteklenir

Örnekler

gruplandırma KÜMELERİ kullanan örnekler ROLLUP ve küp, bkz:GROUP BY ROLLUP küp ve KÜMELERI GRUPLANDıRMA ile kullanma.

C.Bir basit grupla kullanarak yan tümce

Aşağıdaki örnek, her toplam alanSalesOrderIDgelenSalesOrderDetailTablo.

USE AdventureWorks;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;

B.GROUP BY yan tümce ile birden çok tablo kullanma

Aşağıdaki örnek, her çalışan sayısını alırCitygelenAddresskatılan bir tabloyuEmployeeAddressTablo.

USE AdventureWorks;
GO
SELECT a.City, COUNT(ea.AddressID) EmployeeCount
FROM HumanResources.EmployeeAddress ea 
    INNER JOIN Person.Address a
        ON ea.AddressID = a.AddressID
GROUP BY a.City
ORDER BY a.City;

C.Bir GROUP BY kullanarak yan tümce bir ifade ile

Her yıl için toplam satışları kullanarak aşağıdaki örnek alanDATEPARTişlev.Aynı ifade ikisinde bulunması gerekenSELECTlistesi veGROUP BYyan tümce.

USE AdventureWorks;
GO
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ümce bir HAVING yan tümce ile birlikte kullanma

Aşağıdaki örnekHAVINGiçinde oluşturulan grupları belirtmek için yanGROUP BYyan sonucu eklenebilir küme.

USE AdventureWorks;
GO
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);