本文介绍GROUP BY子句。
语法
可选的 GROUPBY
子句具有以下形式:
GROUP BY { expression | ROLLUP ( expr_list ) |
CUBE ( expr_list ) | GROUPING SETS ( expr_list ) } [, ...]
说明
GROUP BY
将压缩为单个行,所有选定的行共享分组表达式的相同值。expression
可以是输入列名、输出列的名称或序号(SELECT
列表项),或由输入列值组成的任意表达式。在出现歧义的情况下,GROUP BY
名称将被解释为输入列名称而不是输出列名称。
ROLLUP
、CUBE
和 GROUPING SETS
是 GROUPBY
子句的扩展,用于支持多维分析。
如果使用聚合函数,则在构成每个组的所有行中计算聚合函数,为每个组生成单独的值(而在没有 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)