这是计算分组级别的函数。仅当指定了 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/