我在一个包含按位标志的表中有一个字段。假设为了示例,有三个标志:4 => 读取,2 => 写入,1 => 执行
,表格如下所示*
:
user_id | file | permissions
-----------+--------+---------------
1 | a.txt | 6 ( <-- 6 = 4 + 2 = read + write)
1 | b.txt | 4 ( <-- 4 = 4 = read)
2 | a.txt | 4
2 | c.exe | 1 ( <-- 1 = execute)
我有兴趣找到在任何记录上设置了特定标志(例如:写入)的所有用户。要在一个查询中执行此操作,我认为如果您将所有用户的权限组合在一起,您将得到一个值,即他们权限的“总和”:
user_id | all_perms
-----------+-------------
1 | 6 (<-- 6 | 4 = 6)
2 | 5 (<-- 4 | 1 = 5)
*
我的实际表格与文件或文件权限无关,只是一个示例
有没有一种方法可以在一个语句中执行此操作?在我看来,它与带有 GROUP BY 的普通聚合函数非常相似:
SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id
...但显然,是一些神奇的“按位或”函数而不是 SUM。有人知道这样的事吗?
(对于奖励积分,它在 oracle 中有效吗?)
最佳答案
MySQL:
SELECT user_id, BIT_OR(permissions) as all_perms
FROM permissions
GROUP BY user_id
关于sql - 是否可以执行按位分组功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397913/