SQL分组设置?

时间:2018-04-30 10:33:26

标签: mysql sql group-by bit

是否有任何方法可以按列中设置的各个位对选择结果进行分组?也就是说,忽略各种位的组合(否则简单的group by column就足够了。)

例如,假设一个表的分组值为1到10只有一次(下面用二进制表示法表示,以简化以下分组语句结果的构造/验证):

 1 0001
 2 0010
 3 0011
 4 0100
 5 0101
 6 0110
 7 0111
 8 1000
 9 1001
10 1010

我希望实现的分组效果如下:

select <bit>, count(*), group_concat(<column>) from <table> group by <...>

0    5    1,3,5,7,9
1    5    2,3,6,7,10
2    4    4,5,6,7
3    3    8,9,10

假设第一位是&#34;位0&#34;。

我目前正在使用MySQL,所以理想情况下解决方案应该在那里工作;但我对其他RDBMS解决方案感兴趣,如果有的话。

1 个答案:

答案 0 :(得分:1)

您需要将值拆分,然后重新聚合。像这样:

select n.n, group_concat(col1)
from t join
     (select 0 as n union all select 1 union all select 2 union all select 3
     ) n
     on (1 << n) & bits > 0
group by n;