本文介紹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)