mysql中整数列的按位分组

mysql中整数列的按位分组,mysql,sql,group-by,bit-manipulation,Mysql,Sql,Group By,Bit Manipulation,我有一个带有整数主键的表和一个整数列 +---------------------+-------------+ | EmployeeId | hour_bitmap | +---------------------+-------------+ | 10001 | 1 | | 10002 | 33554431 | +---------------------+-------------+ 它是

我有一个带有整数主键的表和一个整数列

+---------------------+-------------+
|       EmployeeId    | hour_bitmap |
+---------------------+-------------+
|         10001       |       1     |
|         10002       |   33554431  |
+---------------------+-------------+
它是一个以小时位图形式存储员工每天工作的具体小时数的表格。 例如,第一个员工的值为1,因此他只在第0个小时工作,而员工10002的值为33554431=(1No,没有“好”的方法,因为数据结构是假的。显然有人试图过度优化SQL,并在这样做时使用非关系结构。Arrgg

你能做到吗?当然可以。这里有一个方法:

select h.hh, count(t.employeeid)
from (select 0 as hh union all select 1 union all select 2 union all select 3 . . .
      select 23
     ) h left join
     t
     on t.hour_bitmap & (1 << h.hh) > 0
group by h.hh;
选择h.hh,计数(t.employeeid)
从(选择0作为hh联合所有选择1联合所有选择2联合所有选择3。
选择23
)h左连接
T
在t.hour_位图上&(10)
h.hh分组;