GROUP BY
句を使用して、指定した列に基づいてクエリ結果をグループ化できます。 GROUP BY
句のGROUPING SETS
、CUBE
、およびROLLUP
オプションを使用して、グループ化結果をさまざまな形式で表示することもできます。
GROUP BY式 [, ...]
使用上の注意
GROUP BY列以外の列を宣言するには、
SUM
、AVG
、COUNT
などの標準の集計関数を使用する必要があります。 それ以外の場合は、ARBITRARY
関数が使用されます。GROUP BY
句には、SELECTステートメントに指定されているすべての列と非集計式が含まれている必要があります。
GROUPING SETS
GROUPING SETS
オプションは、1つのクエリに対して複数のGROUP BY
条件を指定するために使用されます。これは、複数のGROUP BY
句のユニオン
に相当します。
SELECT origin_state, origin_zip, destination_state, sum(package_weight)
出荷から
グループ化によるグループ化 (
(origin_state),
(origin_state, origin_zip),
(destination_state);
上記のステートメントは、次のステートメントと同等です。
SELECT origin_state, NULL, NULL, sum(package_weight)
発送からGROUP BY origin_state
ユニオンすべて
SELECT origin_state, origin_zip, NULL, sum(package_weight)
発送からGROUP BY origin_state, origin_zip
ユニオンすべて
SELECT NULL, NULL, destination_state, sum(package_weight)
出荷からGROUP BY destination_state;
CUBE
CUBE
オプションを使用して、すべての可能なグループ化セットを一覧表示します。
SELECT origin_state, destination_state, sum(package_weight)
出荷から
GROUP BY origin_state, destination_state WITH CUBE
上記のステートメントは、次のステートメントと同等です。
SELECT origin_state, destination_state, sum(package_weight)
出荷から
グループ化によるグループ化 (
(origin_state, destination_state),
(origin_state),
(destination_state),
())
ROLLUP
ROLLUP
オプションは、グループ化セットを階層的にリストするために使用されます。
AnalyticDB for MySQLでは、GROUP BY ROLLUP ()
とそれに続く列名は使用できません。 GROUP BY
句のユニオン
を階層的に実装する場合は、GROUP BY GROUPING SETS ((column1, column2), (column1), ()), column3;
を使用できます。
SELECT origin_state, origin_zip, SUM(package_weight)
出荷から
ROLLUPによるグループ (origin_state, origin_zip)
上記のステートメントは、次のステートメントと同等です。
SELECT origin_state, origin_zip, sum(package_weight)
出荷から
GROUP BY GROUPING SETS ((origin_state, origin_zip), (origin_state), ())
例
次のステートメントには、2つの集計式が含まれます。 最初の式はSUM
関数を使用し、2番目の式はCOUNT
関数を使用します。 listid
とeventid
はGROUP BY列です。
SELECT listid、eventid、SUM(pricepaid) を収益として、numtixとしてカウント (qtysold)
販売から
グループBY listid, eventid
注文BY 3, 4, 2, 1
LIMIT 5;
サンプル結果:
listid | eventid | 収益 | numtix
------ -------- ------------- ----------------
89397 | 47 | 20.00 | 1
106590 | 76 | 20.00 | 1
124683 | 393 | 20.00 | 1
103037 | 403 | 20.00 | 1
147685 | 429 | 20.00 | 1
(5行)
シーケンス番号を使用して、GROUP BY
句の列を参照することもできます。 上記のステートメントを次のステートメントに変更できます。
SELECT listid、eventid、SUM(pricepaid) を収益として、numtixとしてカウント (qtysold)
販売から
1,2によるグループ
注文BY 3, 4, 2, 1
LIMIT 5;
サンプル結果:
listid | eventid | 収益 | numtix
------ -------- ------------- ----------------
89397 | 47 | 20.00 | 1
106590 | 76 | 20.00 | 1
124683 | 393 | 20.00 | 1
103037 | 403 | 20.00 | 1
147685 | 429 | 20.00 | 1