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.
Menentukan grup tempat objek yang dikembalikan oleh ekspresi kueri (SELECT) akan ditempatkan.
Sintaksis
[ GROUP BY aliasedExpression [ ,...n ] ]
Argumen
aliasedExpression Ekspresi kueri yang valid tempat pengelompokan dilakukan.
expression dapat berupa properti atau ekspresi non-agregat yang mereferensikan properti yang dikembalikan oleh klausa FROM. Setiap ekspresi dalam klausa GROUP BY harus mengevaluasi ke jenis yang dapat dibandingkan untuk kesetaraan. Jenis-jenis ini umumnya adalah primitif skalar seperti angka, string, dan tanggal. Anda tidak dapat mengelompokkan menurut koleksi.
Komentar
Jika fungsi agregat disertakan dalam daftar> pilih klausa <SELECT, GROUP BY menghitung nilai ringkasan untuk setiap grup. Saat GROUP BY ditentukan, setiap nama properti dalam ekspresi nonaggregate apa pun dalam daftar pilih harus disertakan dalam daftar GROUP BY, atau ekspresi GROUP BY harus sama persis dengan ekspresi daftar pilihan.
Nota
Jika klausul ORDER BY tidak ditentukan, grup yang dikembalikan oleh klausa GROUP BY tidak dalam urutan tertentu. Untuk menentukan urutan data tertentu, kami sarankan Anda selalu menggunakan klausa ORDER BY.
Saat klausul GROUP BY ditentukan, baik secara eksplisit atau implisit (misalnya, dengan klausa HAVING dalam kueri), cakupan saat ini disembunyikan, dan cakupan baru diperkenalkan.
Klausa SELECT, klausa HAVING, dan klausa ORDER BY tidak akan lagi dapat merujuk ke nama elemen yang ditentukan dalam klausa FROM. Anda hanya dapat merujuk ke ekspresi pengelompokan itu sendiri. Untuk melakukan ini, Anda dapat menetapkan nama baru (alias) ke setiap ekspresi pengelompokan. Jika tidak ada alias yang ditentukan untuk ekspresi pengelompokan, Entity SQL mencoba membuatnya dengan menggunakan aturan pembuatan alias, seperti yang diilustrasikan dalam contoh berikut.
SELECT g1, g2, ...gn FROM c as c1
GROUP BY e1 as g1, e2 as g2, ...en as gn
Ekspresi dalam klausa GROUP BY tidak dapat merujuk ke nama yang ditentukan sebelumnya dalam klausa GROUP BY yang sama.
Selain nama pengelompokan, Anda juga dapat menentukan agregat dalam klausa SELECT, klausa HAVING, dan klausa ORDER BY. Agregat berisi ekspresi yang dievaluasi untuk setiap elemen grup. Operator agregat mengurangi nilai semua ekspresi ini (biasanya, tetapi tidak selalu, menjadi satu nilai). Ekspresi agregat dapat membuat referensi ke nama elemen asli terlihat dalam cakupan induk, atau ke salah satu nama baru yang diperkenalkan oleh klausa GROUP BY itu sendiri. Meskipun agregat muncul dalam klausa SELECT, klausa HAVING, dan klausa ORDER BY, mereka benar-benar dievaluasi di bawah cakupan yang sama dengan ekspresi pengelompokan, seperti yang diilustrasikan dalam contoh berikut.
SELECT name, sum(o.Price * o.Quantity) as total
FROM orderLines as o
GROUP BY o.Product as name
Kueri ini menggunakan klausul GROUP BY untuk menghasilkan laporan biaya semua produk yang dipesan, dipecah menurut produk. Ini memberikan nama name ke produk sebagai bagian dari ekspresi pengelompokan, lalu mereferensikan nama tersebut dalam daftar SELECT. Ini juga menentukan agregat sum dalam daftar SELECT yang secara internal mereferensikan harga dan kuantitas baris pesanan.
Setiap ekspresi kunci GROUP By harus memiliki setidaknya satu referensi ke cakupan input:
SELECT FROM Persons as P
GROUP BY Q + P -- GOOD
GROUP BY Q -- BAD
GROUP BY 1 -- BAD, a constant is not allowed
Untuk contoh penggunaan GROUP BY, lihat HAVING.
Contoh
Kueri SQL Entitas berikut menggunakan operator GROUP BY untuk menentukan grup tempat objek dikembalikan oleh kueri. Kueri didasarkan pada Model Penjualan AdventureWorks. Untuk mengkompilasi dan menjalankan kueri ini, ikuti langkah-langkah berikut:
Ikuti prosedur dalam Cara: Menjalankan Kueri yang Mengembalikan Hasil PrimitiveType.
Teruskan kueri berikut sebagai argumen ke
ExecutePrimitiveTypeQuerymetode :
SELECT VALUE name FROM AdventureWorksEntities.Products
AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price