在mysql

时间:2018-02-14 10:57:41

标签: mysql sql group-by bit-manipulation

我有一个包含整数主键和整数列的表。

+---------------------+-------------+
|       EmployeeId    | hour_bitmap |
+---------------------+-------------+
|         10001       |       1     |
|         10002       |   33554431  |
+---------------------+-------------+

它是一个表,用于存储员工每天工作的特定小时数。 例如,对于第一个雇员具有值1,因此他仅在第0小时工作,而雇员10002具有值33554431 =(1 <&lt; 25)-1,其比特序列是1 ... 24倍所以他24小时都在工作。

mysql中的hourId上是否存在groupby方法?

1 个答案:

答案 0 :(得分:3)

不,没有“好”的方式,因为数据结构是虚假的。有人显然试图过度优化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;