GROUPING SETS 聚合
GROUPING SETS
聚合是对在您指定的分组上自动执行小计聚合的
GROUP BY
子句的扩展。
您可以将 GROUPING SETS
子句与三个分组函数一起使用:
若要对数据排序,请使用
ORDER BY
子句。ORDER BY
子句必须跟在 GROUP BY
子句之后。
语法
GROUP BY group-expression[,...]
参数
-
group-expression
- 以下两项中的一个或两个:
-
一个包含常数和
FROM
指定的表中的列引用且不是聚合或分组函数的表达式。例如:column1, (column2+1), column3+column4
-
一个多级表达式,是以下几项之一:
-
ROLLUP
-
CUBE
-
GROUPING SETS
-
-
定义分组
GROUPING SETS 允许您准确指定结果中需要哪些组。您还可以按照以下方式联接分组:
以下示例子句的分组结果将会显示。
示例:选择分组
此示例显示了如何仅选择您需要的分组。假设您仅希望聚合列,并且您不需要总计。第一个查询会忽略合计。在第二个查询中,您将 () 添加到 GROUPING SETS 列表以获得合计。使用 ORDER BY 子句按分组对结果进行排序:
=> SELECT Category, Year, SUM(Amount) FROM expenses
GROUP BY GROUPING SETS((Category, Year), (Year))
ORDER BY 1, 2, GROUPING_ID();
Category | Year | SUM
------------+------+--------
Books | 2005 | 39.98
Books | 2007 | 29.99
Books | 2008 | 29.99
Electrical | 2005 | 109.99
Electrical | 2006 | 109.99
Electrical | 2007 | 229.98
| 2005 | 149.97
| 2006 | 109.99
| 2007 | 259.97
| 2008 | 29.99
=> SELECT Category, Year, SUM(Amount) FROM expenses
GROUP BY GROUPING SETS((Category, Year), (Year), ())
ORDER BY 1, 2, GROUPING_ID();
Category | Year | SUM
------------+------+--------
Books | 2005 | 39.98
Books | 2007 | 29.99
Books | 2008 | 29.99
Electrical | 2005 | 109.99
Electrical | 2006 | 109.99
Electrical | 2007 | 229.98
| 2005 | 149.97
| 2006 | 109.99
| 2007 | 259.97
| 2008 | 29.99
| | 549.92