Есть ли способ сгруппировать результаты выбора по отдельным битам, установленным в столбце? То есть игнорирование комбинаций различных битов (иначе было бы достаточно простого 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
предполагая, что первый бит равен «бит 0».
В данный момент я использую MySQL, поэтому в идеале решение должно там работать; но я был бы заинтересован в других решениях RDBMS, если таковые имеются.
1<<n
делает то же самое, что и в большинстве c-подобных языков программирования: сдвигает1
влево наn
, фактически то же самое, что и2^n
(2
в степениn
).n
исходит из значений0, 1, 2, 3
, сгенерированных внутренним выбором, который охватывает биты, которые меня интересовали, в моем примере из вопроса. Сдвиг необходим для созданияbit-mask
с помощью которогоbitwise-and
столбец, значения которого я пытаюсь сгруппировать. 30.04.2018