本文介绍GROUP BY子句。

语法

可选的 GROUPBY 子句具有以下形式:

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

说明

GROUP BY 将压缩为单个行,所有选定的行共享分组表达式的相同值。expression 可以是输入列名、输出列的名称或序号(SELECT 列表项),或由输入列值组成的任意表达式。在出现歧义的情况下,GROUP BY 名称将被解释为输入列名称而不是输出列名称。

ROLLUPCUBEGROUPING SETSGROUPBY 子句的扩展,用于支持多维分析。

如果使用聚合函数,则在构成每个组的所有行中计算聚合函数,为每个组生成单独的值(而在没有 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)