SQL группа по битам установлена? - PullRequest
0 голосов
/ 30 апреля 2018

Есть ли способ группировки результатов выбора по отдельным битам, установленным в столбце? То есть игнорирование комбинаций различных битов (в противном случае достаточно простого group by column).

Например, если предположить, что таблица имеет значения от 1 до 10 для столбца group-by ровно один раз (представлена ​​ниже с двоичным представлением для упрощения построения / проверки следующего результата оператора group-by):

 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

при условии, что первый бит равен "бит 0".

В настоящее время я использую MySQL, поэтому в идеале решение должно работать там; но я был бы заинтересован в других решениях СУБД, если таковые имеются.

1 Ответ

0 голосов
/ 30 апреля 2018

Вам нужно разделить значения и затем снова собрать их. Примерно так:

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;
...