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

如何编写DB2查询:优先取Ranking为First的name,无则取Second

DB2 查询:优先获取First等级记录,无则取Second等级

针对你的需求——优先查询Ranking = 'First'的name字段,当不存在这类记录时再查询Ranking = 'Second'的记录,完全忽略其他等级——这里有两种适合DB2的实现方案:

方案1:使用UNION ALL + EXISTS判断(逻辑直观,效率较高)

这种方法直接分情况处理,先获取所有First等级的记录,只有当First等级记录不存在时,才返回Second等级的记录:

SELECT name
FROM your_table_name
WHERE Ranking = 'First'
UNION ALL
SELECT name
FROM your_table_name
WHERE Ranking = 'Second'
AND NOT EXISTS (SELECT 1 FROM your_table_name WHERE Ranking = 'First');

说明:

  • UNION ALL比UNION更高效,因为它不需要对结果集去重,适合保留所有符合条件的记录
  • 第二个查询的NOT EXISTS条件确保只有当表中没有任何First等级记录时,才会执行并返回Second等级的记录

方案2:使用窗口函数(适合复杂优先级扩展)

如果后续可能需要扩展更多等级的优先级,窗口函数的方式更灵活:

SELECT name
FROM (
    SELECT 
        name,
        -- 给First/Second分配优先级数值,First为最高优先级(1)
        MIN(CASE Ranking 
            WHEN 'First' THEN 1 
            WHEN 'Second' THEN 2 
            ELSE 3 END) OVER () AS highest_priority
    FROM your_table_name
    -- 只筛选需要考虑的等级
    WHERE Ranking IN ('First', 'Second')
) ranked_data
-- 只保留和最高优先级匹配的记录
WHERE CASE Ranking 
    WHEN 'First' THEN 1 
    WHEN 'Second' THEN 2 
    ELSE 3 END = highest_priority;

说明:

  • 内层查询通过MIN() OVER ()计算整个筛选结果集中的最高优先级(如果有First记录,最高优先级是1;否则是2)
  • 外层查询只返回优先级等于最高优先级的记录,实现"优先取First,无则取Second"的逻辑

记得把语句中的your_table_name替换成你实际使用的表名哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:10