首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GROUPING_ID功能

GROUPING_ID功能
EN

Stack Overflow用户
提问于 2014-11-07 12:08:30
回答 1查看 1.9K关注 0票数 2

我不太明白这个函数是如何工作的,我一直在查看下面的文档,并且我有一些问题。

http://msdn.microsoft.com/en-us/library/bb510624.aspx

因此,我完全理解GROUPING()是如何工作的,但是GROUPING_ID的输出对于我来说是完全不可能理解的,因为它与解释不一样。

例如,我有下面的1和0字符串:010。在文档中,它说它等于2。我还在一本SQL书中读到,每一个字节(最右边) is EQUAL与2的幂次方为字节位置减去1。

那么,(2^2 - 1) + (2^1 -1)+ (2^0 - 1),但是对于每个二进制数,这不是相同的吗?(100/101/110/etc),结果也不是2.

编辑1:书中的解释如下:

另一个用于识别分组集的函数是GROUPING_ID,该函数接受分组列的列表作为输入,并返回一个表示位图的整数。最右边的部分代表最右边的输入。当相应的元素是分组集合的一部分时,位是0,而不是的时候是1。每个位代表2上升到位位置的幂减去1;所以最右边的位代表1,左边的1,然后4,然后8等等。结果整数是表示不属于分组集的元素的值之和,因为它们的位是打开的。这里有一个查询,演示了这个函数的使用。

必须有一个错误,因为一个数字不可能由2^(位置)- 1来计算,这是一个错误吗?我一直在计算2^(位位) *1,输出是正确的。例如,我做了这个

代码语言:javascript
复制
GROUPING_ID(a,b,c),
GROUPING(a),
GROUPING(b),
GROUPING(c)

假设我们有以下输出

代码语言:javascript
复制
3, 0, 1, 1

所以我们的二进制字符串是011,3是GROUPING_ID函数的输出,如果我们计算字符串的话

代码语言:javascript
复制
2^0 * 1 + 2^1 * 1 + 2^0 *2 = 1 + 2 + 0 = 3

这里没有其他的逻辑,我不能用减号来计算,上面的引语是,在MSDN上,更奇怪的定义似乎有点类似于这个定义:

每个GROUPING_ID参数必须是按列表分组的元素。GROUPING_ID ()返回一个整数位图,其最低N位可能被亮起。 lit位指示对应的参数不是给定输出行的分组列。最低阶位对应于参数N,而N-1次低阶位对应于参数1.

EN

回答 1

Stack Overflow用户

发布于 2014-11-07 12:38:19

假设我们有从右到左的二进制数0101

1->(2^0*1)=1

0>(2^1*0)=0

1->(2^2*1)=4

0>(2^3*0)=0

如果我们把所有的结果相加,我们就会得到5个

所以0101(二进制)=5(小数)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26800970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档