GROUPING
当具有多级别聚合的 GROUP BY 查询生成 NULL 值以确定分组列中的小计时,消除 NULL 值的使用。这些来自于原始数据的 NULL 值也会发生在行中。 GROUPING 返回 1 — 在 expression 的值为以下值时:
-
NULL,表示聚合的值 -
0 — 对任何其他值,包括行中的
NULL值
行为类型
不可变语法
GROUPING ( expression )
参数
- 表达式
GROUP BY子句中的表达式
示例
以下查询使用 GROUPING 函数,将 GROUP BY 表达式之一作为实参。对于每一行,GROUPING 返回以下值之一:
-
0:列是该行的组的一部分 -
1:列不是该行的组的一部分
GROUPING(Year) 列中电力和书籍的值为 1,表示这些值是小计。GROUPING(Category) 和 GROUPING(Year) 最右边的列值为 1。此值表示两个列都不会成为 GROUP BY 的结果。最终行表示总销售量。
=> SELECT Category, Year, SUM(Amount),
GROUPING(Category), GROUPING(Year) FROM expenses
GROUP BY ROLLUP(Category, Year) ORDER BY Category, Year, GROUPING_ID();
Category | Year | SUM | GROUPING | GROUPING
-------------+------+--------+----------+----------
Books | 2005 | 39.98 | 0 | 0
Books | 2007 | 29.99 | 0 | 0
Books | 2008 | 29.99 | 0 | 0
Books | | 99.96 | 0 | 1
Electricity | 2005 | 109.99 | 0 | 0
Electricity | 2006 | 109.99 | 0 | 0
Electricity | 2007 | 229.98 | 0 | 0
Electricity | | 449.96 | 0 | 1
| | 549.92 | 1 | 1