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
查詢和分析結果
樣本2
按照每小時的時間粒紋計算網站訪問PV。其中,__time__欄位為Log Service中的保留欄位,表示時間列。time為date_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
查詢和分析結果
樣本3
按照每5分鐘的時間粒紋計算PV。
查詢和分析語句
因為date_trunc函數只能按照固定時間間隔統計。如果您需要按照自訂的時間進行統計分析,請按照數學模數方法進行分組。例如%300表示按照5分鐘的時間粒紋進行模數對齊。
* | SELECT count(*) AS PV, __time__-__time__ % 300 AS time GROUP BY time LIMIT 1000
查詢和分析結果
樣本4
根據要求方法和請求狀態分組,先計算各個要求方法對應的訪問資料,再計算各個請求狀態對應的訪問數量。
查詢和分析語句
* | SELECT request_method, status, count(*) AS PV GROUP BY GROUPING SETS (request_method, status)
查詢和分析結果
樣本5
根據要求方法和請求狀態分組,分組集包括(null, null)、(request_method, null)、(null, status)和(request_method, status),計算以上各個分組的訪問數量。
查詢和分析語句
* | SELECT request_method, status, count(*) AS PV GROUP BY CUBE (request_method, status)
查詢和分析結果
樣本6
根據要求方法和請求狀態分組,分組集包括(request_method, status)、(request_method, null)和(null, null),計算以上各個分組的訪問數量。
查詢和分析語句
* | SELECT request_method, status, count(*) AS PV GROUP BY ROLLUP (request_method, status)
查詢和分析結果