Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
SELECT Klausa pernyataan yang membagi hasil kueri menjadi grup baris, biasanya dengan melakukan satu atau beberapa agregasi pada setiap grup. Pernyataan SELECT mengembalikan satu baris untuk setiap grup.
Syntax
Sintaksis yang mematuhi ISO untuk SQL Server dan Azure SQL Database:
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 ] )
Sintaks yang tidak mematuhi ISO untuk SQL Server dan Azure SQL Database (hanya kompatibilitas mundur):
GROUP BY {
ALL column-expression [ , ...n ]
| column-expression [ , ...n ] WITH { CUBE | ROLLUP }
}
Sintaks untuk Azure Synapse Analytics:
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
| ROLLUP ( <group_by_expression> [ , ...n ] )
} [ , ...n ]
Sintaks untuk Analytics Platform System (PDW):
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
} [ , ...n ]
Arguments
column-expression
Menentukan kolom atau perhitungan nonagregat pada kolom. Kolom ini bisa menjadi milik tabel, tabel turunan, atau tampilan. Kolom harus muncul dalam FROM klausa SELECT pernyataan, tetapi tidak perlu muncul dalam SELECT daftar.
Untuk ekspresi yang valid, lihat ekspresi.
Kolom harus muncul dalam FROM klausa SELECT pernyataan, tetapi tidak diperlukan untuk muncul dalam SELECT daftar. Namun, Anda harus menyertakan setiap tabel atau kolom tampilan dalam GROUP BY daftar jika Anda menggunakannya dalam ekspresi nonaggregate apa pun dalam <select> daftar.
Opsi GROUP BY
Opsi berikut memperluas klausul dasar GROUP BY untuk mendukung agregasi hierarkis, ringkasan multidimensi, kombinasi pengelompokan kustom, dan perilaku eksekusi khusus platform. Kueri dapat menggunakan opsi ini untuk menghasilkan subtotal dan total keseluruhan dalam satu operasi logis.
ROLLUP ( <group_by_expression> [ , ... n ] )
Menghasilkan subtotal hierarkis untuk kolom yang tercantum dan total keseluruhan akhir (misalnya,
(a,b,c),(a,b),(a),()). Gunakan untuk laporan penelusuran seperti setahun>kuartal>bulan.CUBE ( <group_by_expression> [ , ... n ] )
Menghasilkan semua kombinasi kolom yang ditentukan (kisi 2^n lengkap) ditambah total keseluruhan. Gunakan untuk analisis multi-dimensi di setiap ipotong.
GROUPING SETS ( <grouping_set> [ , ... n ] )
Menentukan pengelompokan yang tepat untuk menghitung (termasuk
()total keseluruhan) dalam satu pass. Opsi ini secara fungsional miripUNION ALLdengan beberapaGROUP BYkueri tetapi dioptimalkan bersama-sama.() (set pengelompokan kosong)
Singkatan untuk menghitung hanya total keseluruhan di semua baris. Gunakan sendiri sebagai
GROUP BY ()atau di dalamGROUPING SETS.SEMUA ekspresi kolom [ , ... n ](non-ISO; kompatibilitas mundur)
Singkatan untuk mengelompokkan menurut semua item pilih nonaggregated. Dipertahankan untuk kompatibilitas; ketersediaan dan semantik bervariasi.
column-expression [ , ... n ] WITH { CUBE | 'ROLLUP }(formulir warisan)
Sintaksis non-ISO yang lebih lama dan setara
GROUP BY CUBE(...)dengan atauGROUP BY ROLLUP(...). Didukung hanya untuk kompatibilitas mundur. Gunakan subklaus ISO jika memungkinkan.WITH (DISTRIBUTED_AGG)
Petunjuk eksekusi terdistribusi untuk agregasi saat mengelompokkan menurut satu kolom. Kumpulan SQL khusus Azure Synapse Analytics dan Analytics Platform System (PDW) adalah satu-satunya platform yang mendukung opsi ini.
GROUP BY column-expression [ ,... n ]
Mengelompokkan hasil SELECT pernyataan sesuai dengan nilai dalam daftar satu atau beberapa ekspresi kolom.
Misalnya, kueri ini membuat Sales tabel dengan kolom untuk Region, Territory, dan Sales. Ini menyisipkan empat baris, dan dua baris memiliki nilai yang cocok untuk Region dan Territory.
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);
Tabel Sales berisi baris-baris ini:
| Region | Wilayah | Sales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Kolombia Inggris | 200 |
| Canada | Kolombia Inggris | 300 |
| Amerika Serikat | Montana | 100 |
Kueri berikutnya ini mengelompokkan Region dan Territory dan mengembalikan jumlah agregat untuk setiap kombinasi nilai.
SELECT Region,
Territory,
SUM(sales) AS TotalSales
FROM Sales
GROUP BY Region, Territory;
Hasil kueri memiliki tiga baris karena ada tiga kombinasi nilai untuk Region dan Territory.
TotalSales Untuk Kanada dan British Columbia adalah jumlah dua baris.
| Region | Wilayah | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Kolombia Inggris | 500 |
| Amerika Serikat | Montana | 100 |
Ekspresi kolom di GROUP BY tidak boleh berisi:
- Alias kolom yang Anda tentukan dalam
SELECTdaftar. Ini dapat menggunakan alias kolom untuk tabel turunan yang ditentukan dalamFROMklausa. - Kolom jenis teks, ntext, atau gambar. Namun, Anda dapat menggunakan kolom teks, ntext, atau gambar sebagai argumen ke fungsi yang mengembalikan nilai tipe data yang valid. Misalnya, ekspresi dapat menggunakan
SUBSTRING()danCAST(). Aturan ini juga berlaku untuk ekspresi dalamHAVINGklausa. - metode jenis data xml. Ini dapat mencakup fungsi yang ditentukan pengguna yang menggunakan metode jenis data xml . Ini dapat menyertakan kolom komputasi yang menggunakan metode jenis data xml .
- Sebuah subquery. Kueri mengembalikan kesalahan 144.
- Kolom dari tampilan terindeks.
Pernyataan berikut diizinkan:
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;
Pernyataan berikut tidak diizinkan:
SELECT ColumnA,
ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
SELECT ColumnA + constant + ColumnB
FROM T
GROUP BY ColumnA + ColumnB;
GROUP BY ROLLUP ()
Membuat grup untuk setiap kombinasi ekspresi kolom. Selain itu, ini menggulung hasil menjadi subtotal dan total keseluruhan. Saat membuat grup, grup berpindah dari kanan ke kiri, mengurangi jumlah ekspresi kolom untuk pengelompokan dan agregasi.
Urutan kolom memengaruhi ROLLUP output dan dapat memengaruhi jumlah baris dalam tataan hasil.
Misalnya, GROUP BY ROLLUP (col1, col2, col3, col4) membuat grup untuk setiap kombinasi ekspresi kolom dalam daftar berikut:
- kol1, kol2, kol3, kol4
- kol1, kol2, kol3, NULL
- col1, col2, NULL, NULL
- col1, NULL, NULL, NULL
- NULL, NULL, NULL, NULL (Grup dengan
NULLnilai adalah total keseluruhan)
Menggunakan tabel dari contoh sebelumnya, kode ini menjalankan GROUP BY ROLLUP operasi alih-alih dasar GROUP BY.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory);
Hasil kueri memiliki agregasi yang sama dengan dasar GROUP BY tanpa ROLLUP. Selain itu, ini membuat subtotal untuk setiap nilai Wilayah. Akhirnya, memberikan total keseluruhan untuk semua baris. Hasilnya terlihat seperti ini:
| Region | Wilayah | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Kolombia Inggris | 500 |
| Canada | NULL | 600 |
| Amerika Serikat | Montana | 100 |
| Amerika Serikat | NULL | 100 |
| NULL | NULL | 700 |
KELOMPOKKAN MENURUT KUBUS ()
GROUP BY CUBE membuat grup untuk semua kemungkinan kombinasi kolom. Untuk GROUP BY CUBE (a, b), hasilnya memiliki grup untuk nilai unik , (a, b), (NULL, b), (a, NULL)dan (NULL, NULL).
Menggunakan tabel dari contoh sebelumnya, kode ini menjalankan GROUP BY CUBE operasi di Wilayah dan Wilayah.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE(Region, Territory);
Hasil kueri memiliki grup untuk nilai (Region, Territory)unik , , (NULL, Territory), (Region, NULL)dan (NULL, NULL). Hasilnya terlihat seperti ini:
| Region | Wilayah | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| NULL | Alberta | 100 |
| Canada | Kolombia Inggris | 500 |
| NULL | Kolombia Inggris | 500 |
| Amerika Serikat | Montana | 100 |
| NULL | Montana | 100 |
| NULL | NULL | 700 |
| Canada | NULL | 600 |
| Amerika Serikat | NULL | 100 |
MENGELOMPOKKAN MENURUT KUMPULAN PENGELOMPOKAN ()
Opsi menggabungkan GROUPING SETS beberapa GROUP BY klausa ke dalam satu GROUP BY klausa. Hasilnya sama dengan menggunakan UNION ALL pada grup yang ditentukan.
Misalnya, GROUP BY ROLLUP (Region, Territory) dan GROUP BY GROUPING SETS ( ROLLUP (Region, Territory)) mengembalikan hasil yang sama.
Ketika GROUPING SETS memiliki dua elemen atau lebih, hasilnya adalah persatuan elemen. Contoh ini mengembalikan persatuan ROLLUP hasil dan CUBE untuk Wilayah dan Wilayah.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(ROLLUP(Region, Territory), CUBE(Region, Territory));
Hasilnya sama dengan kueri ini yang mengembalikan gabungan dari dua GROUP BY pernyataan.
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 tidak mengonsolidasikan grup duplikat yang dihasilkan untuk GROUPING SETS daftar. Misalnya, di GROUP BY ((), CUBE (Region, Territory)), kedua elemen mengembalikan baris untuk total keseluruhan, dan kedua baris muncul dalam hasil.
Dukungan untuk fitur ISO dan ANSI SQL-2006 GROUP BY
Klausa GROUP BY ini mendukung semua GROUP BY fitur yang disertakan dalam standar SQL-2006 dengan pengecualian sintaks berikut:
Kumpulan pengelompokan tidak diizinkan dalam
GROUP BYklausul kecuali merupakan bagian dari daftar eksplisitGROUPING SETS. Misalnya,GROUP BY Column1, (Column2, ...ColumnN)diizinkan dalam standar tetapi tidak dalam Transact-SQL. Transact-SQL mendukungGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))danGROUP BY Column1, Column2, ... ColumnN, yang setara secara semantik. Klausa ini secara semantik setara dengan contoh sebelumnyaGROUP BY. Pembatasan ini menghindari kemungkinan yangGROUP BY Column1, (Column2, ...ColumnN)dapat disalahartikan sebagaiGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)), yang tidak setara secara semantik.Kumpulan pengelompokan tidak diizinkan di dalam kumpulan pengelompokan. Misalnya,
GROUP BY GROUPING SETS (A1, A2,...An, GROUPING SETS (C1, C2, ...Cn))diizinkan dalam standar SQL-2006 tetapi tidak dalam Transact-SQL. Transact-SQL memungkinkanGROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn)atauGROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn)), yang secara semantik setara dengan contoh pertamaGROUP BYdan memiliki sintaks yang lebih jelas.
KELOMPOKKAN MENURUT ()
Menentukan grup kosong, yang menghasilkan total keseluruhan. Grup ini berguna sebagai salah satu elemen dari GROUPING SET. Misalnya, pernyataan ini memberikan total penjualan untuk setiap wilayah dan kemudian memberikan total keseluruhan untuk semua wilayah.
SELECT Region,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS(Region, ());
GROUP BY ALL column-expression [ ,... n ]
Berlaku untuk: SQL Server dan Azure SQL Database
Note
Gunakan sintaks ini hanya untuk kompatibilitas mundur. Hindari menggunakan sintaks ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan sintaks ini.
Menentukan apakah akan menyertakan semua grup dalam hasil, terlepas dari apakah mereka memenuhi kriteria pencarian dalam WHERE klausa. Grup yang tidak memenuhi kriteria pencarian memiliki NULL agregasi.
GROUP BY ALL:
- Tidak didukung dalam kueri yang mengakses tabel jarak jauh jika ada juga
WHEREklausa dalam kueri. - Gagal pada kolom yang memiliki atribut FILESTREAM.
Dukungan untuk fitur ISO dan ANSI SQL-2006 GROUP BY
Klausa GROUP BY ini mendukung semua GROUP BY fitur yang disertakan dalam standar SQL-2006 dengan pengecualian sintaks berikut:
- Anda hanya dapat menggunakan
GROUP BY ALLdanGROUP BY DISTINCTdalam klausa dasarGROUP BYyang berisi ekspresi kolom. Anda tidak dapat menggunakannya denganGROUPING SETSkonstruksi , ,ROLLUPCUBE,WITH CUBE, atauWITH ROLLUP.ALLadalah default dan implisit. Anda hanya dapat menggunakannya dalam sintaksis kompatibel mundur.
EKSPRESI kolom GROUP BY [ ,... n ] DENGAN { CUBE | ROLLUP }
Berlaku untuk: SQL Server dan Azure SQL Database
Note
Gunakan sintaks ini hanya untuk kompatibilitas mundur. Hindari menggunakan sintaks ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan sintaks ini.
DENGAN (DISTRIBUTED_AGG)
Berlaku untuk: Azure Synapse Analytics and Analytics Platform System (PDW)
DISTRIBUTED_AGG Petunjuk kueri memaksa sistem pemrosesan paralel besar-besaran (MPP) untuk mendistribusikan ulang tabel pada kolom tertentu sebelum melakukan agregasi. Anda bisa menggunakan DISTRIBUTED_AGG petunjuk kueri hanya pada satu kolom dalam GROUP BY klausa. Setelah kueri selesai, tabel yang didistribusikan ulang akan dihilangkan. Tabel asli tidak diubah.
Note
DISTRIBUTED_AGG Petunjuk kueri memberikan kompatibilitas mundur dengan versi Analytics Platform System (PDW) sebelumnya dan tidak meningkatkan performa untuk sebagian besar kueri. Secara default, MPP sudah mendistribusikan ulang data seperlunya untuk meningkatkan performa untuk agregasi.
Komentar
Cara GROUP BY berinteraksi dengan pernyataan SELECT
SELECT Daftar:
- Agregat vektor. Jika Anda menyertakan fungsi agregat dalam
SELECTdaftar,GROUP BYmenghitung nilai ringkasan untuk setiap grup. Fungsi-fungsi ini dikenal sebagai agregat vektor. - Agregat yang berbeda. Agregat
AVG(DISTINCT <column_name>), ,COUNT(DISTINCT <column_name>)danSUM(DISTINCT <column_name>)bekerja denganROLLUP, ,CUBEdanGROUPING SETS.
WHERE Klausul:
- SQL menghapus baris yang tidak memenuhi kondisi dalam
WHEREklausa sebelum melakukan operasi pengelompokan apa pun.
HAVING Klausul:
- SQL menggunakan klausul
HAVINGuntuk memfilter grup dalam tataan hasil.
ORDER BY Klausul:
-
ORDER BYGunakan klausa untuk mengurutkan tataan hasil. KlausaGROUP BYtidak mengurutkan tataan hasil.
nilai NULL:
- Jika kolom pengelompokan berisi
NULLnilai, Mesin Database memperlakukan semuaNULLnilai sama dan mengumpulkannya ke dalam satu grup.
Keterbatasan
Berlaku untuk: SQL Server dan Azure Synapse Analytics
GROUP BY Untuk klausa ROLLUPyang menggunakan , , CUBEatau GROUPING SETS, jumlah maksimum ekspresi adalah 32. Jumlah maksimum grup adalah 4.096 (212). Contoh berikut gagal karena GROUP BY klausul memiliki lebih dari 4.096 grup.
Contoh berikut menghasilkan 4.097 (212 + 1) kumpulan pengelompokan lalu gagal.
GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b)Contoh berikut menghasilkan 4.097 (212 + 1) grup lalu gagal. Baik
CUBE ()dan()set pengelompokan menghasilkan baris total keseluruhan dan kumpulan pengelompokan duplikat tidak dihilangkan.GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())Contoh ini menggunakan sintaksis yang kompatibel dengan mundur. Ini menghasilkan 8.192 (213) kumpulan pengelompokan dan kemudian gagal.
GROUP BY CUBE (a1, ..., a13) GROUP BY a1, ..., a13 WITH CUBEUntuk klausa kompatibel
GROUP BYmundur yang tidak berisiCUBEatauROLLUP,GROUP BYukuran kolom, kolom agregat, dan nilai agregat yang terlibat dalam kueri membatasi jumlahGROUP BYitem. Batas ini berasal dari batas 8.060 byte pada worktable perantara yang menyimpan hasil kueri perantara. Anda dapat menggunakan maksimum 12 ekspresi pengelompokan saat MenentukanCUBEatauROLLUP.
Perbandingan fitur GROUP BY yang didukung
Tabel berikut ini menjelaskan GROUP BY fitur yang didukung produk yang berbeda.
| Feature | SQL Server Integration Services (SSIS) | SQL Server 1 |
|---|---|---|
DISTINCT Agregat |
Tidak didukung untuk WITH CUBE atau WITH ROLLUP. |
Didukung untuk WITH CUBE, , WITH ROLLUPGROUPING SETS, CUBE, atau ROLLUP. |
Fungsi yang ditentukan pengguna dengan CUBE atau ROLLUP nama dalam GROUP BY klausa |
Fungsi dbo.cube(<arg1>, ...<argN>) yang ditentukan pengguna atau dbo.rollup(<arg1>, ...<argN>) dalam GROUP BY klausul diizinkan.Misalnya: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
Fungsi yang ditentukan dbo.cube (<arg1>, ...<argN>) pengguna atau dbo.rollup(<arg1>, ...<argN>) dalam GROUP BY klausul tidak diizinkan.Misalnya: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);SQL Server mengembalikan pesan kesalahan 2. Untuk menghindari masalah ini, ganti dbo.cube dengan [dbo].[cube] atau dbo.rollup dengan [dbo].[rollup].Contoh berikut diizinkan: SELECT SUM (x) FROM T GROUP BY [dbo].[cube](y); |
GROUPING SETS |
Tidak didukung | Supported |
CUBE |
Tidak didukung | Supported |
ROLLUP |
Tidak didukung | Supported |
Total keseluruhan, seperti GROUP BY() |
Tidak didukung | Supported |
fungsi GROUPING_ID |
Tidak didukung | Supported |
fungsi GROUPING |
Supported | Supported |
WITH CUBE |
Supported | Supported |
WITH ROLLUP |
Supported | Supported |
WITH CUBE atau WITH ROLLUP penghapusan pengelompokan "duplikat" |
Supported | Supported |
1Tingkat kompatibilitas database 100 dan yang lebih tinggi.
2 Pesan kesalahan yang dikembalikan adalah: Incorrect syntax near the keyword 'cube'|'rollup'.
Examples
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
A. Menggunakan klausa GROUP BY dasar
Contoh berikut mengambil total untuk masing-masing SalesOrderID dari SalesOrderDetail tabel. Contoh ini menggunakan AdventureWorks.
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail AS sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
B. Menggunakan klausa GROUP BY dengan beberapa tabel
Contoh berikut mengambil jumlah karyawan untuk masing-masing City dari tabel yang Address digabungkan ke EmployeeAddress tabel. Contoh ini menggunakan AdventureWorks.
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. Menggunakan klausa GROUP BY dengan ekspresi
Contoh berikut mengambil total penjualan untuk setiap tahun dengan menggunakan DATEPART fungsi . Anda harus menyertakan ekspresi yang sama dalam SELECT daftar dan GROUP BY klausa.
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. Menggunakan klausa GROUP BY dengan klausa HAVING
Contoh berikut menggunakan klausul HAVING untuk menentukan grup mana yang dihasilkan dalam GROUP BY klausa yang harus disertakan dalam tataan hasil.
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);
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Penggunaan dasar klausa GROUP BY
Contoh berikut menemukan jumlah total untuk semua penjualan pada setiap hari. Kueri mengembalikan satu baris yang berisi jumlah semua penjualan untuk setiap hari.
-- Uses AdventureWorksDW
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
F. Penggunaan dasar petunjuk DISTRIBUTED_AGG
Contoh ini menggunakan petunjuk kueri DISTRIBUTED_AGG untuk memaksa appliance mengacak tabel pada CustomerKey kolom sebelum melakukan agregasi.
-- Uses AdventureWorksDW
SELECT CustomerKey,
SUM(SalesAmount) AS sas
FROM FactInternetSales
GROUP BY CustomerKey WITH(DISTRIBUTED_AGG)
ORDER BY CustomerKey DESC;
G. Variasi sintaks untuk GROUP BY
Saat daftar pilih tidak memiliki agregasi, Anda harus menyertakan setiap kolom dalam daftar pilih dalam GROUP BY daftar. Anda dapat menyertakan kolom komputasi dalam daftar pilih, tetapi Anda tidak diharuskan untuk menyertakannya dalam GROUP BY daftar. Contoh-contoh ini menunjukkan pernyataan yang valid SELECT secara sintis:
-- 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. Menggunakan klausa GROUP BY dengan beberapa ekspresi GROUP BY
Contoh berikut mengelompokkan hasil menggunakan beberapa GROUP BY kriteria. Jika, dalam setiap OrderDateKey grup, subgrup ada yang nilainya DueDateKey membedakan, kueri menentukan pengelompokan baru untuk kumpulan hasil.
-- Uses AdventureWorks
SELECT OrderDateKey,
DueDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, DueDateKey
ORDER BY OrderDateKey;
I. Menggunakan klausa GROUP BY dengan klausa HAVING
Contoh berikut menggunakan klausul HAVING untuk menentukan grup yang dihasilkan dalam GROUP BY klausul yang harus disertakan dalam tataan hasil. Hanya grup dengan tanggal pesanan pada tahun 2004 atau yang lebih baru yang disertakan dalam hasilnya.
-- Uses AdventureWorks
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20040000
ORDER BY OrderDateKey;