Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (E ~ O)

 

GROUP BY 句

この句を使用して、カラム、エイリアス名、関数を 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 関数 [集合]を参照してください。

    GROUPING SETS 句に空のかっこ ( ) を指定すると、全体の集約を含む 1 つのローを返します。

    GROUPING セットで空のカッコを使用する場合の詳細については、空のグループ化指定の使用を参照してください。

  • 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 句を使用できます。

    ROLLUP 演算の詳細については、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 句を使用できます。

    ROLLUP 演算の詳細については、CUBE の使用を参照してください。

  • WITH ROLLUP 句   これは ROLLUP 句の代わりになる構文です。また、T-SQL との互換性のために用意されています。

  • WITH CUBE 句   これは CUBE 句の代わりになる構文です。また、T-SQL との互換性のために用意されています。

備考

GROUP BY 句を使用している場合、カラム、エイリアス名、関数でグループ化できます。クエリの結果には、各グループ・セットの個々の値 (または複数の値) に 1 つのローが含まれます。

参照
標準と互換性
  • SQL/2003   GROUP BY 句はコア機能ですが、GROUPING SETS、ROLLUP、CUBE はコア SQL 機能ではありません。たとえば、ROLLUP 句は機能 T431 の一部です。WITH ROLLUP と WITH CUBE はベンダ拡張です。

次の例は、注文の総数を示す結果セットを返し、各年 (2000 と 2001) の注文数の小計を提供します。

SELECT year ( OrderDate ) Year, Quarter ( OrderDate ) Quarter, count(*) Orders
FROM 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 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 SalesOrders
GROUP BY GROUPING SETS ( ( Year, Quarter ), ( Year ) )
ORDER BY Year, Quarter;