カラム、エイリアス名、関数を SELECT 文の一部としてグループ化します。
GROUP BY | group-by-term, ... | simple-group-by-term, ... WITH ROLLUP | simple-group-by-term, ... WITH CUBE | GROUPING SETS ( group-by-term, ... )
group-by-term : simple-group-by-term | ( simple-group-by-term, ... ) | ROLLUP ( simple-group-by-term, ... ) | CUBE ( simple-group-by-term, ... )
simple-group-by-term : expression | ( expression ) | ( )
GROUPING SETS 句 GROUPING SETS 句を使用すると、1 つのクエリ指定から複数のグループ化に対して集約操作を実行できます。GROUPING SET 句で指定した各セットは、GROUP BY 句と同等です。
たとえば、次の 2 つのクエリは同じです。
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b ), ( a ), ( b ), ( ) ); |
SELECT a, b, SUM( c ) FROM t GROUP BY a, b UNION ALL SELECT a, NULL, SUM( c ) FROM t GROUP BY a UNION ALL SELECT NULL, b, SUM( c ) FROM t GROUP BY b UNION ALL SELECT NULL, NULL, SUM( c ) FROM t; |
結果のローが所属するグループに応じて、グループ化の式を NULL 値として結果セットに反映することができます。この場合、NULL が別のグループ化の結果か、NULL が基本となるデータの実際の NULL 値の結果かについて混乱する可能性があります。入力データに存在する NULL 値とグループ化演算子によって挿入された NULL 値を区別するには、GROUPING 関数を使用します。
GROUPING SETS 句に空のかっこ ( ) を指定すると、全体の集約を含む 1 つのローを返します。
ROLLUP 句 1 つのクエリ指定内に複数のグループ化を指定するときに使用できるという点で、ROLLUP 句は GROUPING SETS 句と似ています。n simple-group-by-term の ROLLUP 句は、n+1 のグループ化セットを生成します。フォーマットは空のかっこで始まり、左から右に連続する group-by-term を付加して構成されます。
たとえば、次の 2 つの文は同じです。
SELECT a, b, SUM( c ) FROM t GROUP BY ROLLUP ( a, b ); |
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b ), a, ( ) ); |
GROUPING SETS 句内で ROLLUP 句を使用できます。
CUBE 句 1 つのクエリ指定内に複数のグループ化を指定するときに使用できるという点で、CUBE 句は ROLLUP 句と GROUPING SETS 句に似ています。CUBE 句は、CUBE 句に表示されている式から作成されるすべての可能な組み合わせを表すときに使用します。
たとえば、次の 2 つの文は同じです。
SELECT a, b, SUM( c ) FROM t GROUP BY CUBE ( a, b, c ); |
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b, c ), ( a, b ), ( a, c ), ( b, c ), a, b, c, () ); |
GROUPING SETS 句内で CUBE 句を使用できます。
WITH ROLLUP 句 これは ROLLUP 句の代わりになる構文であり、Transact-SQL との互換性のために提供されています。
WITH CUBE 句 これは CUBE 句の代わりになる構文であり、Transact-SQL との互換性のために提供されています。
GROUP BY 句を使用している場合、式 (いくつかの制限付き)、カラム、エイリアス名、関数でグループ化できます。クエリの結果には、各グループ化セットの個々の値 (または複数の値) に 1 つのローが含まれます。
空の GROUP BY リスト () は、入力全体の処理を 1 つのグループとして表します。たとえば、次の 2 つの文は同じです。
SELECT COUNT(), SUM(Salary) FROM GROUPO.Employees; |
SELECT COUNT(), SUM(Salary) FROM GROUPO.Employees GROUP BY (); |
なし。
SQL/2008 GROUP BY は、SQL/2008 標準のコア機能です。GROUPING SETS、GROUP BY ()、ROLLUP、CUBE は、オプションの SQL/2008 言語機能 T431 の一部を構成します。SQL Anywhere では、オプションの SQL/2008 言語機能 T432、"Nested and concatenated GROUPING SETS" はサポートされていません。
GROUP BY 句のベンダー拡張を次に示します。
WITH ROLLUP
WITH CUBE
任意の式を GROUP BY の単語として指定する機能。SQL/2008 標準では、GROUP BY のすべての単語が、クエリの FROM 句内の基本となるテーブルからのカラム参照である必要があります。
次の例は、注文の総数を示す結果セットを返し、各年 (2000 と 2001) の注文数の小計を提供します。
SELECT year ( OrderDate ) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY ROLLUP ( Year, Quarter ) ORDER BY Year, Quarter; |
前の ROLLUP 演算の例と同様に、次の CUBE クエリの例は注文の総数を示す結果セットを返し、各年 (2000 と 2001) の注文数の小計を提供します。ROLLUP とは異なり、このクエリは各四半期 (1、2、3、4) の注文数の小計も示します。
SELECT year (OrderDate) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY CUBE ( Year, Quarter ) ORDER BY Year, Quarter; |
次の例は、2000 年と 2001 年の注文数の小計を示す結果セットを返します。GROUPING SETS 演算では、CUBE 演算のように小計の組み合わせをすべて返すのではなく、小計するカラムを選択します。
SELECT year (OrderDate) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY GROUPING SETS ( ( Year, Quarter ), ( Year ) ) ORDER BY Year, Quarter; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |