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.
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 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:
|
Kullanıcı tanımlı işlevdbo.küp (arg1,.. .argn) veya dbo.rollup ()arg1,...argN) grupla yan tümce verilmez. Örneğin:
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:
|
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:
|
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);