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

另请参阅