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

按优先级为每个PartyID筛选唯一账户行(Chequing优先)

按账户优先级筛选数据的SQL修复方案

问题分析

你需要为每个PartyID筛选账户行:优先选择Chequing类账户,无Chequing时选Savings类账户。但用MIN()聚合的写法在PartyID E上失效——返回了Business Savings而非目标的Chequing账户,本质是MIN()依赖字符串字典序排序,和你定义的业务优先级不匹配,导致结果不符合预期。

正确解法:用窗口函数按优先级排序

别依赖聚合函数碰运气,直接用ROW_NUMBER()给每个PartyID下的账户按业务规则排号,取第一行即可,这是最稳妥的实现方式:

完整SQL语句

WITH ranked_accounts AS (
    SELECT 
        PartyID,
        Description,
        Number,
        ROW_NUMBER() OVER (
            PARTITION BY PartyID 
            ORDER BY 
                -- 按业务优先级赋值:Chequing系列排1,Savings系列排2
                CASE 
                    WHEN Description LIKE '%Chequing%' THEN 1
                    WHEN Description LIKE '%Savings%' THEN 2
                    ELSE 3 -- 兜底处理未定义的账户类型
                END
        ) AS rank_num
    FROM your_table
)
SELECT PartyID, Description, Number
FROM ranked_accounts
WHERE rank_num = 1;

逻辑说明

  • PARTITION BY PartyID:将数据按每个PartyID拆分为独立分组,分别处理
  • ORDER BY CASE:明确指定优先级规则,所有含Chequing关键词的账户排最前,含Savings的排其后,完全不受字符串排序干扰
  • ROW_NUMBER():给每组内的行按上述规则编序号,取rank_num=1的行就是该PartyID的目标账户

如果你的账户类型是固定的几个值,也可以把CASE条件写得更精准:

ORDER BY CASE Description
    WHEN 'Chequing' THEN 1
    WHEN 'Business Chequing' THEN 1
    WHEN 'Savings' THEN 2
    WHEN 'Business Savings' THEN 2
END

这种写法能严格遵循你定义的优先级筛选账户,彻底解决PartyID E的异常问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:03:21