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

SQL同用户多行情境下CASE语句返回首个匹配结果问询

解决方案

核心逻辑

CASE语句本身是逐行匹配首个为真的条件,所以同一个用户的多行数据都会独立计算导致重复输出。要实现每个用户仅返回唯一的首个匹配结果,只需按用户维度分组,按CASE的优先级取最高匹配结果即可。

通用窗口函数实现(兼容MySQL8+、PostgreSQL、Spark SQL、Hive等绝大多数SQL环境)

WITH user_case_rank AS (
    SELECT
        user_id,
        -- 按CASE匹配顺序标记优先级,数值越小优先级越高
        CASE
            WHEN [你的Case1判定条件] THEN 1
            WHEN [你的Case2判定条件] THEN 2
            -- 可按顺序扩展更多CASE条件
        END AS case_priority,
        CASE
            WHEN [你的Case1判定条件] THEN 'Case 1'
            WHEN [你的Case2判定条件] THEN 'Case 2'
            -- 对应返回值和上方条件一一匹配
        END AS case_result,
        -- 按用户分组,组内按优先级升序排序,排名第1即为该用户首个匹配结果
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY case_priority ASC) AS rn
    FROM [你的业务表名]
)
SELECT user_id, case_result
FROM user_case_rank
WHERE rn = 1;

提示:如果需要同时获取匹配结果对应行的其他业务字段,直接在子查询的SELECT后添加对应字段即可。

低版本MySQL聚合实现(无需窗口函数支持)

SELECT
    user_id,
    COALESCE(
        MAX(CASE WHEN [你的Case1判定条件] THEN 'Case 1' END),
        MAX(CASE WHEN [你的Case2判定条件] THEN 'Case 2' END)
        -- 可按顺序扩展更多CASE条件
    ) AS case_result
FROM [你的业务表名]
GROUP BY user_id;

提示:COALESCE会按顺序返回第一个非空值,和CASE的首个匹配逻辑完全对齐,写法更简洁适合仅需返回用户ID和匹配结果的场景。

使用说明

将代码中[你的Case1判定条件]、[你的Case2判定条件]、[你的业务表名]替换为你实际的业务判断规则和表名即可运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:05