是否有任何方法可以按列中设置的各个位对选择结果进行分组?也就是说,忽略各种位的组合(否则简单的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解决方案感兴趣,如果有的话。
答案 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;