Klausa GROUP BY sering digunakan dengan fungsi agregat untuk mengkategorikan baris dalam hasil kueri berdasarkan satu atau lebih nilai kolom. Klausa ini menciptakan ringkasan untuk setiap kombinasi nilai unik, meningkatkan analisis data. Selain itu, GROUP BY dapat digabungkan dengan ROLLUP, CUBE, dan GROUPING SETS untuk memperluas kemampuan pengelompokan dan memberikan opsi analisis tambahan.
Sintaksis dasar
GROUP BY
Klausa GROUP BY mengelompokkan hasil analisis.
SELECT
key1,
...
fungsi_agregat
GROUP BY
key,...Parameter:
key1: Kolom yang ingin dikelompokkan berdasarkan nilainya. Mendukung pengelompokkan berdasarkan nama bidang log atau kolom hasil dari fungsi agregat. KlausaGROUP BYmendukung satu atau beberapa kolom.fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperticount,min,max,avg, dansum.
GROUP BY ROLLUP
Klausa GROUP BY ROLLUP membuat ringkasan untuk setiap grup serta total keseluruhan. Sebagai contoh, set hasil dari GROUP BY ROLLUP (a, b) mencakup (a, b), (a, null), dan (null, null).
SELECT
key1,
...
fungsi_agregat
GROUP BY ROLLUP (key1,...)Parameter:
key1: Kolom yang ingin dikelompokkan berdasarkan nilainya. Mendukung pengelompokkan berdasarkan nama bidang log atau kolom hasil dari fungsi agregat. KlausaGROUP BYmendukung satu atau beberapa kolom.fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperticount,min,max,avg, dansum.
GROUP BY CUBE
Klausa GROUP BY CUBE mengelompokkan berdasarkan semua kombinasi kolom yang mungkin. Sebagai contoh, set hasil dari GROUP BY CUBE (a, b) mencakup (a, b), (null, b), (a, null), dan (null, null).
SELECT
key1,
...
fungsi_agregat
GROUP BY CUBE (key1,...)Parameter:
key1: Kolom yang ingin dikelompokkan berdasarkan nilainya. Mendukung pengelompokkan berdasarkan nama bidang log atau kolom hasil dari fungsi agregat. KlausaGROUP BYmendukung satu atau beberapa kolom.fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperticount,min,max,avg, dansum.
GROUP BY GROUPING SETS
Klausa GROUP BY GROUPING SETS mengelompokkan kolom secara berurutan. Sebagai contoh, set hasil dari GROUP BY GROUPING SETS (a, b) mencakup (a, null) dan (null, b).
SELECT
key1,
...
fungsi_agregat
GROUP BY GROUPING SETS (key1,...)Parameter:
key1: Kolom yang ingin dikelompokkan berdasarkan nilainya. Mendukung pengelompokkan berdasarkan nama bidang log atau kolom hasil dari fungsi agregat. KlausaGROUP BYmendukung satu atau beberapa kolom.fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperticount,min,max,avg, dansum.
Contoh
Dalam pernyataan SQL, ketika menggunakan klausa GROUP BY, Anda hanya dapat memilih salah satu dari berikut ini dalam pernyataan SELECT:
Kolom yang ditentukan dalam klausa
GROUP BY.Hasil perhitungan agregat pada kolom apa pun, seperti
COUNT(),SUM(), dll.
Memilih kolom yang tidak termasuk dalam klausa GROUP BY secara langsung tidak diizinkan karena nilainya mungkin tidak unik setelah pengelompokan, menyebabkan ambiguitas. Sebagai contoh, pernyataan berikut tidak valid:
* | SELECT status, request_time, COUNT(*) AS PV GROUP BY statusIni karena request_time bukan bagian dari klausa GROUP BY dan tidak diagregasi.
Format yang benar adalah:
* | SELECT status, arbitrary(request_time), COUNT(*) AS PV GROUP BY statusarbitrary(request_time) adalah metode untuk mengagregasi request_time, menunjukkan bahwa nilai request_time acak dipilih dari setiap grup. Pendekatan ini sesuai dengan aturan sintaksis SQL dan memenuhi persyaratan kueri.
Contoh 1: Menghitung jumlah tampilan halaman (PV) berdasarkan kode status
Pernyataan kueri
* | SELECT status, count(*) AS PV GROUP BY statusHasil kueri

Contoh 2: Menghitung PV per jam untuk akses situs web
Pernyataan kueri
Bidang
__time__adalah bidang cadangan dalam Simple Log Service, yang mewakili kolom waktu.timeadalah alias untukdate_trunc('hour', __time__). Untuk informasi lebih lanjut, lihat fungsi date_trunc.* | SELECT count(*) AS PV, date_trunc('hour', __time__) AS time GROUP BY time ORDER BY time LIMIT 1000Hasil kueri

Contoh 3: Menghitung PV dalam interval 5 menit
Pernyataan kueri
Karena fungsi
date_truncmenghitung pada interval tetap, Anda dapat menggunakan operasi modulo untuk analisis statistik berbasis waktu kustom. Sebagai contoh,%300mewakili operasi modulo untuk mengelompokkan data dalam interval 5 menit.* | SELECT count(*) AS PV, __time__-__time__ % 300 AS time GROUP BY time LIMIT 1000Hasil kueri

Contoh 4: Mengelompokkan berdasarkan metode permintaan dan status, menghitung data akses untuk setiap metode dan hitungan untuk setiap status
Pernyataan kueri
* | SELECT request_method, status, count(*) AS PV GROUP BY GROUPING SETS (request_method, status)Hasil kueri

Contoh 5: Mengelompokkan berdasarkan metode permintaan dan status menggunakan set
(null, null),(request_method, null),(null, status), dan(request_method, status), dan menghitung jumlah akses untuk setiap grupPernyataan kueri
* | SELECT request_method, status, count(*) AS PV GROUP BY CUBE (request_method, status)Hasil kueri

Contoh 6: Mengelompokkan berdasarkan metode permintaan dan status menggunakan set
(request_method, status),(request_method, null), dan(null, null), dan menghitung jumlah akses untuk setiap grupPernyataan kueri
* | SELECT request_method, status, count(*) AS PV GROUP BY ROLLUP (request_method, status)Hasil kueri
