すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:GROUP BY

最終更新日:Jun 11, 2024

GROUP BY句を使用して、指定した列に基づいてクエリ結果をグループ化できます。 GROUP BY句のGROUPING SETSCUBE、およびROLLUPオプションを使用して、グループ化結果をさまざまな形式で表示することもできます。

GROUP BY式 [, ...]

使用上の注意

  • GROUP BY列以外の列を宣言するには、SUMAVGCOUNTなどの標準の集計関数を使用する必要があります。 それ以外の場合は、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関数を使用します。 listideventidは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