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

如何用SQL按自定义优先级筛选各用户最高质量的data_src数据?

解决方案

核心思路是手动定义优先级权重,结合窗口函数筛选每个用户的最高优先级数据,具体实现如下:

方法:CASE + 窗口函数ROW_NUMBER()

先通过CASE语句为每个data_src赋予对应的优先级分数(分数越高优先级越高),再用ROW_NUMBER()按用户分组、优先级降序排序,最后取每组排序第一的记录。

完整SQL代码

WITH ranked_data AS (
    SELECT 
        data_src,
        data,
        users,
        -- 手动指定优先级分数,srcA最高,NULL最低
        ROW_NUMBER() OVER (
            PARTITION BY users 
            ORDER BY CASE data_src 
                WHEN 'srcA' THEN 4
                WHEN 'srcB' THEN 3
                WHEN 'srcC' THEN 2
                ELSE 1 
            END DESC
        ) AS rank_num
    FROM your_table_name
)
SELECT data_src, data, users
FROM ranked_data
WHERE rank_num = 1;

代码解释

  • CASE语句:为每个data_src映射明确的优先级分数,完全脱离字母排序限制,精准匹配需求中的优先级规则。
  • PARTITION BY users:按用户维度分组,确保每个用户的记录单独进行优先级排序。
  • ORDER BY ... DESC:让优先级高的记录排在分组内的最前列。
  • ROW_NUMBER():为每组内的记录按优先级顺序编号,编号为1的就是该用户对应的最高质量数据。

验证结果

代入示例数据后,查询返回结果与预期完全一致:

data_src data   users
srcA     x      user1
srcC     z      user2

补充说明

如果同一用户下存在多条相同最高优先级的data_src(比如同一用户有两条srcA记录),ROW_NUMBER()会随机选取一条;若想保留所有同优先级的记录,可将ROW_NUMBER()替换为RANK()函数,筛选条件保持rank_num = 1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:30:48