посчитать сколько раз встречается каждый бит этого пол вы выборке, то есть бит в позиции 0 -> 100 записей, бит в позиции 1 -> 20 ... бит в позиции 63 -> N записей?
можно как то так SELECT pos, countIf(bit = '0') AS zero_bit, countIf(bit = '1') AS one_bit FROM ( SELECT bin(number) AS res, splitByString('', res) AS arr, bit, pos FROM numbers(10) ARRAY JOIN arr AS bit, arrayEnumerate(arr) AS pos ) GROUP BY pos Query id: 5af511ca-8441-43db-8239-0c1618dab6cf ┌─pos─┬─zero_bit─┬─one_bit─┐ │ 4 │ 10 │ 0 │ │ 3 │ 10 │ 0 │ │ 2 │ 10 │ 0 │ │ 5 │ 8 │ 2 │ │ 1 │ 10 │ 0 │ │ 6 │ 6 │ 4 │ │ 7 │ 6 │ 4 │ │ 8 │ 5 │ 5 │
Есть же нормальный bitTest
WITH toUInt64(100) AS input SELECT sum(bitTest(toUInt64(number), 1) = bitTest(input, 1)) AS count1, sum(bitTest(toUInt64(number), 2) = bitTest(input, 2)) AS count2, sum(bitTest(toUInt64(number), 64) = bitTest(input, 64)) AS count64 FROM numbers(100) Query id: b85434b9-dd54-4582-a23b-b8c34ecc48ce ┌─count1─┬─count2─┬─count64─┐ │ 50 │ 48 │ 100 │ └────────┴────────┴─────────┘
Обсуждают сегодня