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 per grup.
Syntax
Sintaks untuk SQL Server dan Azure SQL Database:
-- ISO-Compliant Syntax
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 ] )
-- For backward compatibility only.
-- Non-ISO-Compliant Syntax for SQL Server and Azure SQL Database
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 non-agregat 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, setiap tabel atau kolom tampilan dalam ekspresi nonaggregate apa pun dalam <select> daftar harus disertakan dalam GROUP BY daftar.
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;
Ekspresi kolom 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. Kesalahan 144 dikembalikan.
- Kolom dari tampilan terindeks.
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 |
GRUP BERDASARKAN ROLLUP
Membuat grup untuk setiap kombinasi ekspresi kolom. Selain itu, ia "menggulung" hasilnya menjadi subtotal dan total keseluruhan. Untuk melakukan ini, ia berpindah dari kanan ke kiri, mengurangi jumlah ekspresi kolom tempatnya membuat grup 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 (Ini adalah total keseluruhan)
Menggunakan tabel dari contoh sebelumnya, kode ini menjalankan GROUP BY ROLLUP operasi alih-alih sederhana GROUP BY.
SELECT Region,
Territory,
SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP(Region, Territory);
Hasil kueri memiliki agregasi yang sama dengan yang sederhana 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.
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.
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. Hanya satu kolom dalam klausa yang GROUP BY bisa memiliki DISTRIBUTED_AGG petunjuk kueri. Setelah kueri selesai, tabel yang didistribusikan ulang akan dihilangkan. Tabel asli tidak diubah.
Note
DISTRIBUTED_AGG Petunjuk kueri disediakan untuk 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, semuaNULLnilai dianggap sama, dan dikumpulkan ke dalam satu grup.
Keterbatasan
Berlaku untuk: SQL Server dan Azure Synapse Analytics
Kapasitas maksimum
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, jumlahGROUP BYitem dibatasi olehGROUP BYukuran kolom, kolom agregat, dan nilai agregat yang terlibat dalam kueri. Batas ini berasal dari batas 8.060 byte pada worktable perantara yang menyimpan hasil kueri perantara. Maksimal 12 ekspresi pengelompokan diizinkan saatCUBEatauROLLUPditentukan.
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)mungkin 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.GROUP BY ALLdanGROUP BY DISTINCThanya diizinkan dalam klausa sederhanaGROUP BYyang berisi ekspresi kolom. Anda tidak dapat menggunakannya denganGROUPING SETSkonstruksi , ,ROLLUPCUBE,WITH CUBE, atauWITH ROLLUP.ALLadalah default dan implisit. Ini juga hanya diizinkan dalam sintaksis yang kompatibel mundur.
Perbandingan fitur yang didukung GROUP BY
Tabel berikut ini menjelaskan GROUP BY fitur yang didukung versi SQL Server dan tingkat kompatibilitas database yang berbeda.
| Feature | SQL Server Integration Services (SSIS) | Tingkat kompatibilitas SQL Server 100 atau lebih tinggi |
|---|---|---|
DISTINCT Agregat |
Tidak didukung untuk WITH CUBE atau WITH ROLLUP. |
Didukung untuk WITH CUBE, , GROUPING SETSWITH ROLLUP, 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);Pesan kesalahan berikut dikembalikan: "Sintaks yang salah di dekat kata kunci 'kubus'|' rollup'." 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 |
Examples
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. Satu baris yang berisi jumlah semua penjualan dikembalikan 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;