Share via


Grup tarafından (Transact-sql)

Seçili satır kümesi, bir veya daha fazla sütun veya ifadelerin değerleri Özet satır kümesi gruplar SQL Server 2012. Her grup için bir satır döndürülür. Toplama işlevleri select yan tümcesinde <seçin> listesi tek tek satırlar yerine her grubu hakkında bilgi sağlar.

group by yan tümcesi, bir ISO uyumlu sözdizimi ve ISO uyumlu olmayan bir sözdizimi vardır. Tek bir select deyimi tek bir sözdizimi stili kullanılır. ISO uyumlu sözdizimi, tüm yeni çalışma için 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ümcesi tanımlanabilir:

  • GROUPING KÜMELERI, cube, rollup, WITH cube veya rollup ile genel group by yan tümcesi içerir.

  • GROUPING KÜMELERI, cube, rollup, WITH cube veya rollup ile basit bir group by koşulu içermez. group by () genel toplam, bir basit grupla kabul edilir.

Konu bağlantısı simgesi Transact-SQL Sözdizim 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>
    İse ifade gruplandırma işlemi gerçekleştirildiği tarih.

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

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

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

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

    Sütunlar, sağdan sola toplanır. Sütun sırasını, toplu çıkış gruplandırmaları etkiler ve sonuç kümesindeki satır sayısını etkileyebilir.

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

    Küp çıktılar bir gruplandırma için ifadelerin tüm permütasyon <bileşik öğe listesi>.

    Eşittir sayı gruplandırmalar oluşturulan (2n), burada n = ifadelerde sayısı <bileşik öğe listesi>. Örneğin, aşağıdaki deyim düşünün.

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

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

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

  • GROUPING SETS)
    Bir sorguda birden çok gruplandırmalar veri belirtir. Sadece belirtilen gruplara, cube veya rollup tarafından oluşturulan toplamalardan kümesinin yerine toplanır. Sonuçlar UNION all belirtilen grupların eşdeğerdir. GROUPING KÜMELERI, tek bir öğe veya öğeler içerebilir. GROUPING KÜMELERI gruplandırmalar eşdeğer bu güncelleştirme toplaması veya küp tarafından döndürülen belirtebilirsiniz. <Gruplandırma ayarla öğe listesi> rollup ve cube içerebilir.

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

Sigara-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, hatta, where yan tümcesinde belirtilen arama koşulu karşılayan satırları sahip olmayan ve grupları içerir. all belirtilen zaman, boş değerler arama koşulu uymayan gruplarının özet sütunları döndürülür. TÜM cube veya rollup operatörleri ile belirtemezsiniz.

    all group by varsa da bir where yan tümcesi sorguda uzak tabloları erişmek sorgular desteklenmez. all group by FILESTREAM özniteliğine sahip sütunlarda başarısız olur.

  • group_by_expression
    Olan bir ifade gruplandırmanın üzerinde gerçekleştirilir. group_by_expressionolarak da bilinen gruplandırma sütundur. group_by expressionbir sütun veya from yan tümcesi tarafından döndürülen sütun başvuran bir toplu olmayan ifade olabilir. SEÇME listesinde tanımlanan bir sütun diğer adı, bir gruplandırma sütun belirtmek için kullanılamaz.

    [!NOT]

    Sütun türü text, ntext, ve imagekullanılamaz group_by_expression.

    cube veya rollup, sayısı içermeyen group by yan tümceleri için group_by_expressionöğeleri grupla sütun boyutları tarafından toplanan sütunlar, sınırlı olduğu ve toplam değerler dahil sorguda. Bu sınır ara sorgu sonuçları tutmak için gerekli ara worktable 8,060 bayt sınırını kaynaklanır. cube veya rollup belirtildiğinde ifadeler gruplandırma 12 maksimum izin verilir.

    xmlveri türü yöntemleri doğrudan belirtilemez group_by_expression. Kullanan kullanıcı tanımlı bir işlev yerine bakın xmlveri yazın içindeki yöntemleri ya da onları kullanan hesaplanmış bir sütun için bakın.

  • KÜP İLE
    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.Grup tarafından sağlanan her zamanki satırlara ek olarak, sonuç kümesi Özet satırları sunulan belirtir. Özet satırını Gruplandır grup ve alt grup sonuç kümesinde her olası birleşimini için döndürülür. GROUPING işlevi, sonuç kümesinde null değerleri grupla Özet değerleri belirlemek için kullanın.

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

  • PAKETİ İLE
    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.Grup tarafından sağlanan her zamanki satırlara ek olarak, sonuç kümesi Özet satırları sunulan belirtir. Gruplar bir hiyerarşik kaliteden en düşük en yüksek grup düzeyi özetlenmiştir. Grup hiyerarşisini gruplandırma sütunlar belirtildiği sıraya göre belirlenir. Gruplandırma sütun sırasını değiştirme üretilen sonuç kümesinde satırların sayısını etkileyebilir.

    Önemli notÖnemli

    DISTINCT toplamları, örneğin, avg (DISTINCT column_name), count (DISTINCT column_name) ve sum (DISTINCT column_name), cube veya rollup kullandığınızda desteklenmez. Bunlar kullanılırsa, SQL Server Veritabanı Altyapısıhata iletisi ve sorguyu iptal.

Açıklamalar

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

Her tablo veya Görünüm sütunda zorunluluğu herhangi bir ifadede <seçin> listesi Grupla listesinde dahil edilmelidir:

  • 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;
    
    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 verilir:

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

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

where yan tümcesinde koşulları karşılamayan bir satır, herhangi bir gruplandırma işlemi yapılmadan önce kaldırılır.

HAVING yan tümcesi, sonuç kümesinde filtre gruplarına group by yan tümcesi ile birlikte kullanılır.

group by yan tümcesi, sonuç kümesi sipariş değil. order by yan tümcesi, sonuç kümesi sipariş etmek için kullanın.

Gruplandırma sütun null değeri içeriyorsa, tüm boş değerlere eşit olarak kabul edilir ve tek bir grupta konur.

Diğer ad from yan tümcesinde türetilmiş bir tablo sütun adını değiştirir sürece as yan tümcesi bir sütun adını değiştirmek için bir diğer ad ile Grupla kullanamazsınız.

Yinelenen GROUPING KÜMELERI gruplandırma ayarlar listesinden elimine değil. Yinelenen GROUPING KÜMELERI, bir sütun ifadesi birden fazla saat belirterek veya de gruplandırma ayarlar listesinde cube veya rollup ile oluşturulan bir sütun ifadesi listeleme oluşturulabilir.

DISTINCT toplamları, örneğin, avg (DISTINCT column_name), count (DISTINCT column_name) ve sum (DISTINCT column_name) rollup, cube ve GROUPING KÜMELERI ile desteklenmektedir.

Dizin oluşturulmuş görünüm içinde rollup, cube ve GROUPING KÜMELERI belirtilemez.

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

xmlveri türü yöntemleri doğrudan belirtilemez bir <column_expression>. Kullanan kullanıcı tanımlı bir işlev yerine bakın xmlveri yazın içindeki yöntemleri ya da onları kullanan hesaplanmış bir sütun için bakın.

Kısıtlamaları KÜMELERI, rollup, GRUPLANDIRMAK ve küp

Sözdizimi sınırlamalar

GROUPING KÜMELERI listesinde bir parçası olmadıkları sürece GROUPING KÜMELERI group by yan tümcesinde izin verilmez. Örneğin, GROUP BY C1, (C2,..., Cn)izin verilmez, ancak GROUP BY GROUPING SETS (C1, (C2, ..., Cn))izin.

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

ISO olmayan tüm, WITH cube ve rollup WITH anahtar rollup, cube veya GROUPING KÜMELERI anahtar kelimeler ile bir group by yan tümcesinde izin verilmez.

Boyutu sınırlamaları

Basit grupla için ifadeleri sayısında bir sınır yoktur.

rollup, cube veya gruplandırma ayarlar kullanan bir group by yan tümcesi için ifadeler sayısı 32 ve oluşturulabilir GROUPING KÜMELERI sayısı 4096 (212). group by yan tümcesi çok karmaşık olduğu için aşağıdaki örneklerde başarısız:

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

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

    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )
    
    GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )
    
  • Aşağıdaki örnek, aynı zamanda 4097 oluşturur (212 + 1) kümeleri gruplandırma. Hem CUBE ()ve ()gruplandırma kümesi üretmek bir genel toplam satırı ve yinelenen GROUPING KÜMELERI değil elendi.

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

ISO ve ANSI sql-2006 grup özellikleri için destek

De SQL Server 2012, group by yan tümcesi alt sorgu için Grup listesi tarafından kullanılan bir deyim bulunamaz. Hata 144 döndürülür.

SQL Server 2012sql-2006 standart aşağıdaki sözdizimi istisnalar dahil tüm grup tarafından özellikleri destekler:

  • GROUPING KÜMELERI açık GROUPING ayarlar listesinin parçası olmadıkları sürece group by yan tümcesinde izin verilmez. Fiilen, GROUP BY Column1, (Column2, ...ColumnN) standart ama değil izin verilir SQL Server. GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))veya GROUP BY Column1, Column2, ... ColumnNizin. Bunlar önceki anlam karşılığı GROUP BYörnek. Olasılığını önlemek için budur ki GROUP BY Column1, (Column2, ...ColumnN) olarak yanlış yorumlanabilir GROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)). Bu anlam eşdeğer değildir.

  • GROUPING KÜMELERI gruplandırma kümeleri içinde izin verilmez. Örneğin, GROUP BY GROUPING SETS (A1, A2,…An, GROUPING SETS (C1, C2, ...Cn))sql-2006 standart ama değil izin verilir SQL Server. SQL Server 2012allows GROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn ) or GROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn) ). Bu örnekleri ilk grup tarafından örnek anlam karşılığı ve daha net bir sözdizimine sahiptir.

  • group by [all/DISTINCT] genel group by yan tümcesinde veya GROUPING KÜMELERI, rollup, cube, WITH cube veya rollup ile yapıları ile izin verilmez. TÜM varsayılan ve örtülü.

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

Sürümüne yönelik desteklenen grupla özellikleri aşağıdaki tabloda açıklanmıştır SQL Serverve veritabanı uyumluluk düzeyi.

Özellik

SQL Server 2005 Tümleştirme Hizmetleri

SQL Server uyumluluk düzeyi 100 veya daha yüksek

SQL Server 2008 veya sonraki bir sürümü ile uyumluluk düzeyi 90

DISTINCT toplamları

WITH cube veya rollup WITH için desteklenmiyor.

cube, rollup, GROUPING KÜMELERI, cube veya rollup ile ile desteklenmez.

Uyumluluk düzeyi 100 ile aynıdır.

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

User-defined function dbo.cube(arg1,...argN) or dbo.rollup(arg1,... argN) group by yan tümcesi izin verilir.

Örneğin:

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

Kullanıcı tanımlı işlevin dbo.cube (arg1,.. .argn) veya dbo.ROLLUP(arg1,...argN)(D1,...argN) group by yan tümcesi verilmez.

Örneğin:

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

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

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

Aşağıdaki örnek izin verilir:

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

Kullanıcı tanımlı işlevin dbo.cube (arg1,...argN) veya dbo.ROLLUP(arg1,...argN)(arg1,...argN) group by yan tümcesi izin verilir

Örneğin:

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

GROUPING KÜMELERI

Desteklenen değil

Desteklenen

Desteklenen

KÜP

Desteklenen değil

Desteklenen

Desteklenen değil

ROLLUP

Desteklenen değil

Desteklenen

Desteklenen değil

group by () gibi genel toplam

Desteklenen değil

Desteklenen

Desteklenen

GROUPING_ID işlevi

Desteklenen değil

Desteklenen

Desteklenen

Gruplandırma işlevi

Desteklenen

Desteklenen

Desteklenen

KÜP İLE

Desteklenen

Desteklenen

Desteklenen

PAKETİ İLE

Desteklenen

Desteklenen

Desteklenen

cube veya rollup WITH "aynısı" ile gruplandırmayı kaldırma

Desteklenen

Desteklenen

Desteklenen

Örnekler

A.Basit group by yan tümcesi kullanarak

Toplam her biri için aşağıdaki örnek alır SalesOrderIDdan SalesOrderDetailtablosu.

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

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

B.Bir group by yan tümcesi ile birden fazla tablo kullanma

Aşağıdaki örnek alır her çalışan sayısı Citydan AddressTablo alanına EmployeeAddresstablosu.

USE AdventureWorks2012;
GO
SELECT a.City, COUNT(bea.AddressID) 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;

USE AdventureWorks2012;
GO
SELECT a.City, COUNT(bea.AddressID) 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ümcesi ile bir ifade kullanma

Aşağıdaki örnek kullanarak toplam satışları her yıl alır DATEPARTişlevi. Aynı ifade de bulunması gereken SELECTlistesi ve GROUP BYyan.

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

USE AdventureWorks2012;
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ümcesi bir HAVING yan tümcesi ile kullanma

Aşağıdaki örnek HAVINGoluşturulan grupları belirtmek için yan GROUP BYyan tümcesi sonuç kümesinde dahil.

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

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

Ayrıca bkz.

Başvuru

GROUPING_ID (Transact-sql)

GRUPLANDIRMA (Transact-sql)

select (Transact-sql)

Yantümcesi (Transact-sql) seçin