構文

オプションのGROUP BY 句の構文は次のとおりです。

GROUP BY { expression | ROLLUP ( expr_list ) |
  CUBE ( expr_list ) | GROUPING SETS ( expr_list ) } [, ...]

説明

GROUP BY 句は、グループ化された式の同じ値を共有するすべての選択された行を単一の行に圧縮します。 expression には、入力列名、または SELECT リストで指定された出力列の名前または序数を指定することができます。 入力列の値から形成された式にすることもできます。 あいまいな場合、GROUP BY 名は出力列ではなく入力列の名前として解釈されます。

ROLLUPCUBE、および GROUPING SETS は、GROUP BY 句の拡張です。 これらの拡張機能は、多次元分析をサポートするために使用されます。

集計関数を使用する場合、集計関数は各グループのすべての行にわたって計算されます。 これにより、グループごとに個別の値が生成されます。 GROUP BY 句が指定されていない場合、集約関数は、選択されたすべての行にわたって計算された単一の値を生成します。 GROUP BY 句が使用されている場合、 SELECT リスト式は、集約関数内を除いて、グループ化されていない列を参照することができません。 これは、グループ化されていない列に対して複数の値が返される可能性があるためです。

次の例では、emp テーブルの sal 列の合計を計算し、結果を部門番号でグループ化します。

SELECT deptno, SUM(sal) AS total
    FROM emp
    GROUP BY deptno;

 deptno |  total
--------+----------
     10 |  8750.00
     20 | 10875.00
     30 |  9400.00
(3 rows)