暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GROUPING_ID函数的介绍及举例

原创 努力努力再努力 2024-11-01
358

一、函数介绍

GROUPING_ID(expr) 函数表示参数是否参与分组的向量值(分组统计语法中,分组组

合指其中的单列或多列表达式的某种分组情况),返回数值的二进制位表示对应参数列是否

为分组列。当参与分组时,参数位为 0 ;否则为 1 。

例如,GROUPING_ID(c1,c2) 返回值为 2 ,对应二进制数值为 10 ,表示 c1 列未参与, c2 列参与分组。

注:该文章中的举例部分 数据库版本为:GBase8sV8.8_3.5.1

二、函数语法

返回值计算规则如下:

GROUPING_ID(expr1,expr2,……)中的每个参数 expr 对应一个列,当该参数对

应的列为分组列时,该参数位的值为 0 ,否则为 1 。最后将所有参数位的值串联在一起,

组成一个 0 和 1 的二进制数,再将该二进制数转换为一个十进制数,即为 GROUPING_ID

的返回值

三、限制

1.GROUPING_ID 函数的返回值类型为整型数值。

2.GROUPING_ID 函数的参数支持多个。参数限制和 GROUP BY 参数限制保持一致。

3. GROUPING_ID 函数的参数 expr 必须是 GROUP BY 子句中的表达式的子集。

4. GROUPING_ID 函数的参数 expr 不支持为 NULL 。

5. GROUPING_ID 作为分组函数,不能出现在 WHERE 或连接条件中。

6. 当在视图中使用 SELECT GROUPING_ID () 时,必须使用别名,否则报错。

7. 使用 HAVING GROUPING_ID () 时,不可用别名,需直接使用函数表达式。

四、举例

1.例如,表 tab 1 表结构如下:

对表 tab1 的 c1、c2 列进行 CUBE 分组,统计分组组合包括 (c1,c2),(c1),(c2),全

空 四种分组组合。 使用 GROUPING_ID(c1,c2) 函数返回 c1,c2 列是否参与分组的向量值。

结果如下:

五、结果解释:

1.以下是 CUBE(c1, c2) 可能的输出组合(假设 c1 和 c2 是维度列,而实际选择的列(如 c1, c2)在 SELECT 语句中明确列出):

(c1, c2) 的所有唯一组合(非聚合维度)

(c1, NULL) 的每个 c1 的汇总(c2 被视为 NULL,表示在 c1 维度上的汇总)

(NULL, c2) 的每个 c2 的汇总(c1 被视为 NULL,表示在 c2 维度上的汇总)

(NULL, NULL) 的全表汇总

2.在 SELECT 语句中,GROUPING(c1) 和 GROUPING(c2) 会指示在特定聚合行中,c1 和 c2 是否为 NULL(即,它们是否参与了当前行的聚合)。如果列参与了聚合(即,它不是 NULL),则 GROUPING 函数返回 0;如果列被设置为 NULL 以进行汇总(例如,在 (c1, NULL) 或 (NULL, c2) 组合中),则 GROUPING 函数返回 1。

3.GROUPING_ID 函数为当前的聚合行返回一个唯一的位掩码,其中每一位对应于 GROUPING 函数的一个参数。如果相应的列在聚合中被视为 NULL(即用于汇总),则该位被设置为 1;否则,它被设置为 0。对于两个参数的 GROUPING_ID(c1, c2),返回的整数值可以是一个 0 到 3 的数字,其中:

0 表示 (c1, c2) 是具体的值(非聚合)

1 表示 (c1, NULL)(仅 c1 聚合)

2 表示 (NULL, c2)(仅 c2 聚合)

3 表示 (NULL, NULL)(全表聚合)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论