全部產品
Search
文件中心

Simple Log Service:GROUP BY子句

更新時間:Jun 30, 2024

GROUP BY子句用於結合彙總函式,根據一個或多個列對分析結果進行分組。GROUP BY子句還支援搭配ROLLUP子句、CUBE子句和GROUPING SETS子句,擴充分組功能。

文法

GROUP BY

分析結果進行分組。

SELECT 
 key,
  ...
 aggregate function 
 GROUP BY 
 key,...

GROUP BY ROLLUP

GROUP BY ROLLUP子句按照匯總分組,支援為每個分組返回一個小計,為所有分組返回一個總計。例如GROUP BY ROLLUP (a, b),結果集為(a, b)、(a, null) 和 (null, null) 。

SELECT
key,
 ...
aggregate function 
GROUP BY ROLLUP (key,...)

GROUP BY CUBE

GROUP BY CUBE子句按照所有可能的列組合進行分組。例如GROUP BY CUBE (a, b),結果集為(a, b)、(null, b)、(a, null) 和 (null, null) 。

SELECT 
key,
...
aggregate function 
GROUP BY CUBE (key,...)

GROUP BY GROUPING SETS

GROUP BY GROUPING SETS子句按照列依次進行分組。例如GROUP BY GROUPING SETS (a, b),結果集為(a, null)和(null, b)。

SELECT 
key,
... 
aggregate function 
GROUP BY GROUPING SETS (key,...)
重要

在SQL語句中,如果您使用了GROUP BY子句,則在執行SELECT語句時,只能選擇GROUP BY的列或者對任意列進行彙總計算,不允許選擇非GROUP BY的列。例如* | SELECT status, request_time, COUNT(*) AS PV GROUP BY status為非法分析語句,因為request_time不是GROUP BY的列。正確語句為* | SELECT status, arbitrary(request_time), count(*) AS PV GROUP BY status

參數說明

參數

說明

key

日誌欄位名稱或彙總函式計算結果列,即支援按照日誌欄位名稱或彙總函式計算結果列進行分組。

GROUP BY子句支援單列或多列。

aggregate function

彙總函式。GROUP BY子句常與min、max、avg、sum、count等彙總函式搭配使用。更多資訊,請參見彙總函式

樣本

樣本1

統計不同狀態代碼對應的請求次數。

  • 查詢和分析語句

    * | SELECT status, count(*) AS PV GROUP BY status
  • 查詢和分析結果group by

樣本2

按照每小時的時間粒紋計算網站訪問PV。其中,__time__欄位為Log Service中的保留欄位,表示時間列。timedate_trunc('hour', __time__)的別名。date_trunc函數的更多資訊,請參見date_trunc函數

  • 查詢和分析語句

    * |
    SELECT
      count(*) AS PV,
      date_trunc('hour', __time__) AS time
    GROUP BY
      time
    ORDER BY
      time
    LIMIT
      1000                       
  • 查詢和分析結果group by

樣本3

按照每5分鐘的時間粒紋計算PV。

  • 查詢和分析語句

    因為date_trunc函數只能按照固定時間間隔統計。如果您需要按照自訂的時間進行統計分析,請按照數學模數方法進行分組。例如%300表示按照5分鐘的時間粒紋進行模數對齊。

    * |
    SELECT
      count(*) AS PV,
      __time__-__time__ % 300 AS time
    GROUP BY
      time
    LIMIT
      1000
  • 查詢和分析結果group by

樣本4

根據要求方法和請求狀態分組,先計算各個要求方法對應的訪問資料,再計算各個請求狀態對應的訪問數量。

  • 查詢和分析語句

    * |
    SELECT
      request_method,
      status,
      count(*) AS PV
    GROUP BY
      GROUPING SETS (request_method, status)
  • 查詢和分析結果GROUPING SETS

樣本5

根據要求方法和請求狀態分組,分組集包括(null, null)、(request_method, null)、(null, status)和(request_method, status),計算以上各個分組的訪問數量。

  • 查詢和分析語句

    * |
    SELECT
      request_method,
      status,
      count(*) AS PV
    GROUP BY
     CUBE (request_method, status)
  • 查詢和分析結果CUBE

樣本6

根據要求方法和請求狀態分組,分組集包括(request_method, status)、(request_method, null)和(null, null),計算以上各個分組的訪問數量。

  • 查詢和分析語句

    * |
    SELECT
      request_method,
      status,
      count(*) AS PV
    GROUP BY
     ROLLUP (request_method, status)
  • 查詢和分析結果ROLLUP