Aracılığıyla paylaş


Grup, (Transact-SQL)

Bir seçili küme satır bir küme Özet satırları bir veya daha çok sütun veya deyime göre değerleri gruplandırır SQL Server 2008 R2.Her grup için bir satır döndürülür.select yan tümceişlevlerinde toplama<seçin> listesi her grubu ayrı ayrı satırlar yerine hakkında bilgi sağlar.

group by yan tümce bir ISO uyumlu sözdizimi ve ISO uyumlu olmayan bir sözdizimine sahiptir.Tek bir select deyimiçinde yalnızca bir sözdizimi stili kullanılır.Tüm yeni çalışma için ISO uyumlu sözdizimi kullanın.ISO uyumlu sözdizimi, geriye dönük uyumluluk için sağlanır.

Bu konuda, genel ya da basit olarak bir group by yan tümce tanımlanabilir:

  • Bir genel group by yan tümce GRUPLANDIRMA KÜMELERİ, KÜP, TOPLAMASI, WITH cube veya WITH rollup içerir.

  • Bir basit group by yan tümce GRUPLANDIRMA KÜMELERİ, KÜP, TOPLAMASI, WITH cube veya WITH rollup içermez.Bir basit grupla (group by), genel toplamı olarak kabul edilir.

Konu bağlantısı simgesiTransact-SQL Sözdizimi Kuralları (Transact-SQL)

Sözdizimi

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>
    Olan ifade gruplandırma işlemi gerçekleştirildiği üzerinde.

  • TOPLAMA)
    Basit grupla toplu satırları, artı alt toplamı veya super -toplu satır ve aynı zamanda genel toplam satırı oluşturur.

    Döndürülen gruplandırmalar sayısı ifadelerde sayısına eşittir <bileşik öğe listesi> bir artı.Örneğin, aşağıdaki deyimdüşünün.

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

    Tek bir satırla bir alt toplam değerleri, her benzersiz birleşimi için üretilen (a, b, c), (a, b), ve (a).Genel toplam satırı da hesaplanır.

    Sütunları sağdan sola toplu.sütun sırasını TOPLAMASI çıktı gruplandırmaları etkiler ve sonuç kümesisatır sayısını etkileyebilir.

  • KÜP)
    Basit grupla toplu satırları TOPLAMASINI super -toplu satırları ve Çapraz çizelgeleme satırları oluşturur.

    KÜP verir bir gruplandırma için tüm permütasyon ifadelerin, <bileşik öğe listesi>.

    Eşittir sayı gruplandırma üretilen (2n), burada n = ifadelerde sayısı <bileşik öğe listesi>.Örneğin, aşağıdaki deyimdüşünün.

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

    Bir satır 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 bir genel toplam satırı.

    KÜP çıkışını sütun sırasını etkilemez.

  • GRUPLANDIRMA KÜMELERİ)
    Bir sorguda birden çok gruplandırmalar veri belirtir.Yalnızca belirtilen gruplar, tam küme , cube veya rollup tarafından üretilen toplamalardan yerine birikir.sonuçlar olur UNION all belirtilen grupların karşılığıdır.GRUPLANDIRMA KÜMELERİ tek bir öğe veya öğeler içerebilir.Olanlar TOPLAMASI veya KÜP tarafından verilen eşdeğer gruplandırmalar GRUPLANDIRMA KÜMESİ belirtebilirsiniz.Örnekler için, bkz. GRUPLANDIRMA KÜMELERİ eşdeğerleri.<gruplandırmakümeöğe listesinde> TOPLAMASI veya KÜP içerebilir.

  • ( )
    Boş bir grubu bir toplam oluşturur.

Olmayan-ISO uyumlu sözdizimi

  • ALL
    Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.Tüm sonuç kümeleri olanlar where yan tümcetümcesinde belirtilen arama koşulu uyan tüm satırları olmayan ve grupları içerir.TÜM belirtilen zaman arama koşuluuymayan gruplarının Özet sütunları null değerleri döndürülür.Tüm cube veya rollup işleçlerle belirtemezsiniz.

    TARAFINDAN tüm sorgularda, varsa da bir where yan tümce sorguda uzak tablolara erimek desteklenmiyor.TARAFINDAN tüm FILESTREAM özniteliksahip sütunlar üzerinde başarısız olur.

  • group_by_expression
    Olan bir ifade üzerinde hangi gruplandırma yapılır.group_by_expressiongruplandırmasütunolarak bilinir. group_by expressionbir sütun ya da bir olmayan - bir sütun başvurutopluifade from yan tümcetarafından döndürülen. select listesinde tanımlanan bir sütun diğer ad gruplandırma sütunbelirtmek için kullanılamaz.

    Not

    Sütun türü text, ntext, ve image içinde kullanılamaz group_by_expression.

    cube veya rollup, sayısı içermeyen group by yan tümceleri için group_by_expression group by sütun boyutlarını, toplanan sütunlar ve katılan toplu değerlerini öğeler sınırlısorgusu.Bu sınır, ara sorgu sonuçlarbarındırmak için gerekli Ara worktable 8,060 bayt miktarı sınırı kaynaklandığı.cube veya rollup belirtildiğinde en fazla 12 gruplandırma ifadeler izin verilir.

    xmlveri türü yöntemleri doğrudan belirtilemez group_by_expression.Bunun yerine kullanan bir kullanıcı tanımlı işlev başvuran xml veri içindeki yöntemleri yazın veya bunları kullanan hesaplanmış bir sütun için başvurun.

  • KÜP
    Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.sonuç kümesigroup by tarafından sağlanan her zamanki satırlara ek olarak, Özet satırları sunulan belirtir.Özet satırını GRUPLANDIR her olası birleşimini Grup ve alt grup sonuç kümesiiçin döndürülür.GRUPLANDIRMA işlev null değerleri sonuç kümesi group by Özet değerler olup olmadığını belirlemek için kullanın.

    Özet satır sonuç kümesi group by yan tümcetümcesinde dahil sütun sayısı belirlenir.KÜP her olası birleşimini Grup ve alt grup verdiği için satır sayısını, gruplandırma sütunlar belirtildiği bakılmaksızın aynıdır.

  • İLE TOPLAMASI
    Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.sonuç kümesigroup by tarafından sağlanan her zamanki satırlara ek olarak, Özet satırları sunulan belirtir.Gruplar bir hiyerarşik sırayla grubundaki en yüksek en düşük düzey özetlenmiştir.Grup hiyerarşisini gruplandırma sütunlar belirtilen düzeni tarafından belirlenir.gruplandırma sütun sırasını değiştirme sonuç kümesiüretilen satır sayısını etkiler.

    Önemli notÖnemli

    DISTINCT toplamları, örneğin, avg (DISTINCT column_name), count (DISTINCT column_name) ve sum (DISTINCT column_name), KÜP veya TOPLAMASI. kullandığınızda desteklenmezBunlar kullanılırsa, SQL Server Veritabanı Altyapısı bir hata iletisi verir ve iptal eder sorgu.

Açıklamalar

group by yan tümce ifadelerinde, tablolar, türetilen tablolar veya görünümler from yan tümcetümcesinde sütunlar içerebilir.Sütunların select yan tümcetümcesinde görünür gerekli değildir<seçin> listesi.

Her bir tablo ya da görünümün sütun zorunluluğu içindeki herhangi bir ifade <seçin> grupla listesinde liste dahil:

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

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

toplu işlevleri select yan tümcetümcesinde dahil edilen<seçim listesi>, group by her grup için bir Özet değer hesaplar. Bunlar, vektör aggregates bilinir.

where yan tümce koşullara uymayan satırları gruplandırma herhangi bir işlem yapılmadan önce kaldırılır.

HAVINGyan tümce group by yan tümce filtre gruplarına sonuç kümesiile kullanılır.

group by yan tümce , sonuç kümesisipariş değil.order by yan tümce sipariş sonuç kümesiiçin kullanın.

gruplandırmasütun null değerleri içeriyorsa, tüm null değerleri eşit kabul edilir ve bunlar tek bir grup olarak yerleştirilir.

group by ile bir diğer ad diğer ad from yan tümcetümcesinde türetilmiş bir tablo sütun adını değiştirir sürece as yan tümce tümcesindeki sütun adını değiştirmek için kullanamazsınız.

Yinelenen gruplandırma kümeleri GRUPLANDIRMA ayarlar listesinde ortadan yok.Birifade sütunbirden fazla saat belirterek veya GRUPLANDIRMA ayarlar listesinde de cube veya rollup ile oluşturulan bir sütunifade listeleme yinelenen gruplandırma kümeleri oluşturulabilir.

DISTINCT toplamları, örneğin, avg (DISTINCT column_name), count (DISTINCT column_name) ve sum (DISTINCT column_name) TOPLAMASI, KÜP ve GRUPLANDIRMA KÜMELERİ. ile desteklenen

Bir ' % s'görünümü dizinli görünümiçinde TOPLAMASI, KÜP ve GRUPLANDIRMA KÜMESİ belirtilemez.

group by veya HAVING doğrudan sütunları üzerinde kullanılamaz ntext, text, veya image.Bu sütunlar, SUBSTRING() ve cast() gibi başka bir veri türünde bir değer döndüren İşlevler, bağımsız değişkenler olarak kullanılabilir.

xmlveri türü yöntemleri doğrudan belirtilemez bir <column_expression>.Bunun yerine kullanan bir kullanıcı tanımlı işlev başvuran xml veri içindeki yöntemleri yazın veya bunları kullanan hesaplanmış bir sütun için başvurun.

KÜMELERİ, TOPLAMASI ve KÜP GRUPLANDIRMAK için Grup by kısıtlamaları

Sözdizimi sınırlamalar

GRUPLANDIRMA KÜMELERİ GRUPLANDIRMA KÜMELERİ listesinin parçası olmadıkça group by yan tümce tümcesinde izin verilmez.Örneğin, GROUP BY C1, (C2,..., Cn) izin verilmez, ancak GROUP BY GROUPING SETS (C1, (C2, ..., Cn)) izin.

GRUPLANDIRMA KÜMELERİ GRUPLANDIRMA KÜMELERİ içinde izin verilmez.Örneğin, GROUP BY GROUPING SETS (C1, GROUPING SETS (C2, C3)) izin yok.

ISO olmayan tüm WITH cube ve WITH rollup anahtar sözcükleri bir group by yan tümce TOPLAMASI, KÜP veya GRUPLANDIRMA KÜMELERİ anahtar sözcükler içinde izin verilmez.

Boyut sınırlamaları

Basit grupla için ifadeler sayısı sınırı yoktur.

Güncelleştirme TOPLAMASI, KÜP veya GRUPLANDIRMA ayarlar kullanan bir group by yan tümce için ifadeler sayısı 32'dir ve en fazla 4096 oluşturulabilir gruplandırma kümeleri olabilir (212).Aşağıdaki örnekler, group by yan tümce çok karmaşık olduğu için başarısız:

  • Aşağıdaki örnekler 8192 üretmek (213) gruplandırma kümeleri.

    GROUP BY CUBE (a1, ..., a13) 
    GROUP BY a1, ..., a13 WITH CUBE 
    
  • Aşağıdaki örnek 4097 oluşturur (212 + 1) gruplandırma kümeleri.

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )
    
  • Aşağıdaki örnek de 4097 oluşturur (212 + 1) gruplandırma kümeleri.Her ikisi de CUBE () ve () gruplandırma küme bir genel toplam satırı üretmek ve yinelenen gruplandırma kümeleri ortadan yok.

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

ISO ve ANSI SQL-CVE -2006 Grup by özellikleri için destek

İçinde SQL Server 2008 ve üstü sürümler, group by yan tümce alt sorgu içinde ifade grubu için kullanılan içeremezlistesi.144 Hata döndürülür.

SQL Server 2008ve üstü sürümleri SQL-CVE -2006 aşağıdaki sözdizimi durumlarla standart dahil tüm grup tarafından özellikleri destekler:

  • Gruplandırma kümeleri açık bir GRUPLANDIRMA KÜMELERİ listesinde bir parçası olmadıkça group by yan tümce tümcesinde izin verilmez.For example, GROUP BY Column1, (Column2, ...ColumnN) standart ancak değil de izin SQL Server.GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))veya GROUP BY Column1, Column2, ... ColumnN izin.Bunlar önceki gönderilmesinin eşdeğerdir GROUP BY örnek.Bu olasılığı önlemek içindir, GROUP BY Column1, (Column2, ...ColumnN) olarak yorumlanabilir GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)).Bu gönderilmesinin eşdeğer değildir.

  • Gruplandırma kümeleri gruplandırma kümeleri içinde izin verilmez.Örneğin, GROUP BY GROUPING SETS (A1, A2,…An, GROUPING SETS (C1, C2, ...Cn)) izin verilen SQL-CVE -2006 alanında değil ancak standart SQL Server.SQL Server 2008ve üstü sürümler izin GROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn ) veya GROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn) ).Bu örnek, ilk olarak grup tarafından örnek gönderilmesinin eşdeğerlidir ve daha net bir sözdizimine sahiptir.

  • group by [tüm/DISTINCT] bir genel group by yan tümce veya GRUPLANDIRMA KÜMELERİ, güncelleştirme TOPLAMASI, KÜP, WITH cube veya WITH rollup yapıları ile izin verilmez.Tüm varsayılan ve örtülü.

Desteklenen Grup by özellikleri karşılaştırması

Aşağıdaki tablo tabanlı sürüm desteklenen grupla özellikleri açıklar SQL Server ve 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 önceki

DISTINCT toplamları

WITH cube veya WITH rollup için desteklenmiyor.

TOPLAMASI, GRUPLANDIRMA KÜMELERİ, cube veya rollup ile KÜP ile desteklenen.

Aynı SQL Server 2008 Uyumluluk düzey 100.

group by yan tümcecube veya rollup adı ile kullanıcı tanımlı işlev

Kullanıcı tanımlı işlev dbo.küp(arg1,...argN) or dbo.rollup(arg1,...argN) yan tümce group by içinde verilir.

Örneğin:

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

Kullanıcı tanımlı işlevdbo.küp (arg1,.. .argn) veya dbo.rollup ()arg1,...argN) grupla yan tümce verilmez.

Örneğin:

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

Aşağıdaki hata iletisi döndürülür: "anahtar sözcük yakınında yanlış sözdizimi 'küp' | 'toplama'."

Bu sorunu önlemek için yerini dbo.cube ile [dbo].[cube] veya dbo.rollup ile [dbo].[rollup].

Aşağıdaki örnek verilir:

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

Kullanıcı tanımlı işlevdbo.küp (arg1,...argN) veya dbo.rollup (arg1),...argN) yan tümce group by içinde izin

Örneğin:

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

GRUPLANDIRMA KÜMELERİ

Desteklenmiyor

Desteklenen

Desteklenen

KÜP

Desteklenmiyor

Desteklenen

Desteklenmiyor

TOPLAMASI

Desteklenmiyor

Desteklenen

Desteklenmiyor

group by () gibi genel toplam

Desteklenmiyor

Desteklenen

Desteklenen

GROUPING_ID işlev

Desteklenmiyor

Desteklenen

Desteklenen

GRUPLANDIRMA işlev

Desteklenen

Desteklenen

Desteklenen

KÜP

Desteklenen

Desteklenen

Desteklenen

İLE TOPLAMASI

Desteklenen

Desteklenen

Desteklenen

cube veya rollup "çift" ile gruplandırma kaldırma

Desteklenen

Desteklenen

Desteklenen

Örnekler

GRUPLANDIRMA KÜMELERİ, TOPLAMASI ve KÜP kullanın örnekler için bkz: GROUP BY'ı ROLLUP, CUBE ve GROUPING SETS ile Kullanma.

A.Bir basit group by yan tümcekullanarak

Toplam her biri için aşağıdaki örnek alır SalesOrderID dan SalesOrderDetail tablo.

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

B.Birden çok tabloyla bir group by yan tümce kullanarak

Aşağıdaki örnek, çalışanlar için her sayısını alır City dan Addresskatılantablo EmployeeAddresstablo.

USE AdventureWorks2008R2;
GO
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 group by yan tümce bir ifadekullanma

Aşağıdaki örnek, kullanarak her yıl için toplam satışları alır DATEPART işlev.Aynı ifade her ikisini de bulunması gereken SELECT listesi ve GROUP BY yan tümce.

USE AdventureWorks2008R2;
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.Bir group by yan tümce bir HAVING yan tümceile kullanma

Aşağıdaki örnek HAVINGiçinde oluşturulan grupları belirtmek içinyan tümce GROUP BYyan tümce sonuç kümesieklenmelidir.

USE AdventureWorks2008R2;
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);