全部产品
Search
文档中心

Simple Log Service:Klausa GROUP BY

更新时间:Jul 02, 2025

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. Klausa GROUP BY mendukung satu atau beberapa kolom.

  • fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperti count, min, max, avg, dan sum.

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. Klausa GROUP BY mendukung satu atau beberapa kolom.

  • fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperti count, min, max, avg, dan sum.

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. Klausa GROUP BY mendukung satu atau beberapa kolom.

  • fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperti count, min, max, avg, dan sum.

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. Klausa GROUP BY mendukung satu atau beberapa kolom.

  • fungsi_agregat: fungsi agregat yang diterapkan pada setiap grup, seperti count, min, max, avg, dan sum.

Contoh

Penting

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 status

Ini 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 status

arbitrary(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 status
    • Hasil kuerigroup by

  • 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. time adalah alias untuk date_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
        1000                       
    • Hasil kuerigroup by

  • Contoh 3: Menghitung PV dalam interval 5 menit

    • Pernyataan kueri

      Karena fungsi date_trunc menghitung pada interval tetap, Anda dapat menggunakan operasi modulo untuk analisis statistik berbasis waktu kustom. Sebagai contoh, %300 mewakili operasi modulo untuk mengelompokkan data dalam interval 5 menit.

      * |
      SELECT
        count(*) AS PV,
        __time__-__time__ % 300 AS time
      GROUP BY
        time
      LIMIT
        1000
    • Hasil kuerigroup by

  • 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 kueriGROUPING SETS

  • 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 grup

    • Pernyataan kueri

      * |
      SELECT
        request_method,
        status,
        count(*) AS PV
      GROUP BY
       CUBE (request_method, status)
    • Hasil kueriCUBE

  • 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 grup

    • Pernyataan kueri

      * |
      SELECT
        request_method,
        status,
        count(*) AS PV
      GROUP BY
       ROLLUP (request_method, status)
    • Hasil kueriROLLUP