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

如何将DISTINCT与CASE WHEN或类似语句结合实现特定去重结果?

解决方法

核心思路是按COL1、COL2、COL3分组,通过聚合逻辑判断每组的最终Result,而非单纯用DISTINCT去重。因为FAILURE优先级更高,只要组内存在FAILURE,最终结果就取FAILURE;只有全组都是SUCCESS时,才返回SUCCESS。

方法1:用CASE + 聚合函数判断

通过统计组内FAILURE的数量,只要数量大于0就返回FAILURE:

SELECT 
    COL1, 
    COL2, 
    COL3,
    CASE 
        WHEN COUNT(CASE WHEN Result = 'FAILURE' THEN 1 END) > 0 THEN 'FAILURE'
        ELSE 'SUCCESS'
    END AS FinalResult
FROM (
    SELECT COL1, COL2, COL3, CASE WHEN resolved THEN 'SUCCESS' ELSE 'FAILURE' END AS Result 
    FROM table
    UNION ALL  -- 用UNION ALL更高效,若原UNION是为了去重可保留UNION
    -- 其他类似结构的查询
) AS combined_data
GROUP BY COL1, COL2, COL3;

方法2:利用字符串排序特性(更简洁)

字符串排序中'FAILURE'比'SUCCESS'字母顺序更靠后,用MAX()函数直接取组内最大的Result值,就能自动优先返回FAILURE:

SELECT 
    COL1, 
    COL2, COL3,
    MAX(Result) AS FinalResult
FROM (
    SELECT COL1, COL2, COL3, CASE WHEN resolved THEN 'SUCCESS' ELSE 'FAILURE' END AS Result 
    FROM table
    UNION ALL
    -- 其他类似结构的查询
) AS combined_data
GROUP BY COL1, COL2, COL3;

补充说明

  • 替换原DISTINCT为GROUP BY,因为我们需要对每组数据做逻辑判断,而非简单去重。
  • 若原UNION是为了合并结果时去重,可保留UNION;如果不需要去重,用UNION ALL性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:15:00