You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询拥有app1访问权限用户中各角色人数(按位运算场景)

实现方案

方案1:硬编码角色位(适合角色位固定不变的场景)

直接在SQL中写入三个角色对应的按位判断值,写法简单高效:

SELECT
    SUM(CASE WHEN `app1` & 1 THEN 1 ELSE 0 END) AS `supplier`,
    SUM(CASE WHEN `app1` & 2 THEN 1 ELSE 0 END) AS `client`,
    SUM(CASE WHEN `app1` & 4 THEN 1 ELSE 0 END) AS `consultant`
FROM `authorized_users`
WHERE `permissions` & (
    SELECT `bits` FROM `user_permissions` 
    WHERE `permission_name` = 'app1' AND `app` = 'global'
);

注意:请根据你实际的角色位定义替换1/2/4三个数值,以上仅为示例,对应最低三位分别是supplier、client、consultant权限位的场景。

方案2:动态读取角色位(适合角色位可配置的场景)

直接从user_permissions表读取三个角色对应的位值,不需要硬编码,可维护性更高:

SELECT
    SUM(CASE WHEN up.permission_name = 'supplier' AND au.app1 & up.bits THEN 1 ELSE 0 END) AS supplier,
    SUM(CASE WHEN up.permission_name = 'client' AND au.app1 & up.bits THEN 1 ELSE 0 END) AS client,
    SUM(CASE WHEN up.permission_name = 'consultant' AND au.app1 & up.bits THEN 1 ELSE 0 END) AS consultant
FROM authorized_users au
CROSS JOIN user_permissions up_global
LEFT JOIN user_permissions up 
    ON up.app = 'app1' 
    AND up.permission_name IN ('supplier', 'client', 'consultant')
WHERE 
    up_global.permission_name = 'app1' 
    AND up_global.app = 'global'
    AND au.permissions & up_global.bits;

说明

两种方案均满足以下要求:

  • 统计范围仅包含拥有app1访问权限的用户,权限判断逻辑和提供的原有逻辑完全一致
  • 单个用户同时拥有多个角色时,会被统计到所有对应角色的计数中
  • 最终结果直接返回supplier、client、consultant三列,每列值为对应角色的用户总数

内容的提问来源于stack exchange,提问作者E962

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:06:03