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

SQL查询需求:按role优先级获取唯一id对应的角色值

解决方案

要实现按g > s > f的优先级为每个唯一id选择对应的role,核心是给不同role定义优先级,再按id筛选出优先级最高的记录,以下是两种通用实现方式:

方法一:窗口函数(推荐,支持MySQL 8+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数按优先级给每个id下的role排序,取排序第一的记录:

SELECT id, role
FROM (
    SELECT 
        id, 
        role,
        ROW_NUMBER() OVER (
            PARTITION BY id 
            ORDER BY 
                CASE role 
                    WHEN 'g' THEN 1 
                    WHEN 's' THEN 2 
                    WHEN 'f' THEN 3 
                END ASC
        ) AS rn
    FROM your_table
) t
WHERE rn = 1;

逻辑说明:

  • PARTITION BY id:按id分组处理
  • ORDER BY CASE...:给g分配最高优先级(排序值1),s次之(2),f最低(3)
  • 外层筛选rn=1:取每个id组内优先级最高的role

方法二:GROUP BY + CASE判断(兼容老版本数据库)

通过聚合函数判断每个id是否存在高优先级role,再依次返回对应值:

SELECT 
    id,
    CASE 
        WHEN MAX(CASE WHEN role = 'g' THEN 1 ELSE 0 END) = 1 THEN 'g'
        WHEN MAX(CASE WHEN role = 's' THEN 1 ELSE 0 END) = 1 THEN 's'
        ELSE 'f'
    END AS role
FROM your_table
GROUP BY id;

逻辑说明:

  • 先检查每个id是否存在g(MAX(...) =1表示存在),存在则返回g
  • 若不存在g,再检查是否存在s,存在则返回s
  • 最后默认返回f

两种方法都能得到你期望的结果:

idrole
bg
as
cf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:15:38