GROUPING_ID的應用

这是计算分组级别的函数。仅当指定了 GROUP BY 时,GROUPING_ID 才能在 SELECT 列表、HAVING 或 ORDER BY 子句中使用。

语法


GROUPING_ID ( [ ,...n ] )

GROUPING_ID 必须与 GROUP BY 列表中的表达式完全匹配。例如,如果按 DATEPART (yyyy, <column name>) 分组,则使用 GROUPING_ID (DATEPART (yyyy, <column name>));或者,如果按 <column name> 分组,则使用 GROUPING_ID (<column name>)。

比较 GROUPING_ID () 与 GROUPING ()

GROUPING_ID ( [ ,...n]) 将 GROUPING () 在每个输出行中为其列列表中的每个列返回的对应值作为 0、1 字符串输入。GROUPING_ID 将该字符串解释为二进制数并返回对应的整数。例如,请参考以下语句:SELECT a, b, c, SUM(d),GROUPING_ID(a,b,c)FROM T GROUP BY 。下表显示了 GROUPING_ID () 的输入值和输出值。

聚合的列

GROUPING_ID (a, b, c) 输入 = GROUPING(a) + GROUPING(b) + GROUPING(c)

GROUPING_ID () 输出

a

100

4

b

010

2

c

001

1

ab

110

6

ac

101

5

bc

011

3

abc

111

7

GROUPING_ID () 的技术定义

每个 GROUPING_ID 参数都必须是 GROUP BY 列表的一个元素。GROUPING_ID () 返回一个 integer 位图,其最低 N 位可能为文字。文字 bit 表明对应参数不是给定输出行的分组列。最低顺序 bit 对应于参数 N,第 N-1 个最低顺序 bit 对应于参数 1。

GROUPING_ID () 等效项

对于单个分组查询,GROUPING () 与 GROUPING_ID () 等价,两者均返回 0。

例如,以下语句是等价的:

SELECT GROUPING_ID(A,B)
FROM T
GROUP BY CUBE(A,B)

SELECT 3 FROM T GROUP BY ()
UNION ALL
SELECT 1 FROM T GROUP BY A
UNION ALL
SELECT 2 FROM T GROUP BY B
UNION ALL
SELECT 0 FROM T GROUP BY A,B

----以上來源:http://msdn.microsoft.com/zh-cn/library/bb510624.aspx

等價測試:

   select grouping_id('a','b')
     from dual
   group by cube('a','b')
  
  
SELECT 3 FROM dual GROUP BY ()
UNION ALL
SELECT 1 FROM dual GROUP BY 'a'
UNION ALL
SELECT 2 FROM dual GROUP BY 'b'
UNION ALL
SELECT 0 FROM dual GROUP BY 'a','b'

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16860121/viewspace-713678/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16860121/viewspace-713678/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值