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