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

按Candidate_Key分区处理NULL值筛选Job_Key的SQL实现问题

SQL实现方案

以下是兼容多数主流数据库(MySQL8.0+、PostgreSQL、Oracle、SQL Server等)的实现代码:

窗口函数实现(推荐,性能最优)

WITH ranked_data AS (
    SELECT 
        Candidate_Key,
        Job_Key,
        -- 统计当前Candidate分组下非NULL的Job_Key总数,COUNT会自动忽略NULL值
        COUNT(Job_Key) OVER (PARTITION BY Candidate_Key) AS non_null_job_cnt,
        -- 给同分组内的行排序,方便全NULL分组取第一条记录
        ROW_NUMBER() OVER (PARTITION BY Candidate_Key ORDER BY CASE WHEN Job_Key IS NULL THEN 1 ELSE 2 END DESC) AS rn
    FROM 你的原表名
)
SELECT DISTINCT Candidate_Key, Job_Key
FROM ranked_data
WHERE 
    -- 规则1:分组存在非空Job_Key时,仅保留非空的唯一记录
    (non_null_job_cnt > 0 AND Job_Key IS NOT NULL)
    -- 规则2:分组全为NULL时,仅保留第一条NULL记录
    OR (non_null_job_cnt = 0 AND rn = 1)
ORDER BY Candidate_Key;

兼容低版本数据库的UNION ALL实现

如果数据库不支持窗口函数,可以用拆分逻辑的写法:

-- 取存在非空Job的分组的所有非空唯一记录
SELECT DISTINCT Candidate_Key, Job_Key
FROM 你的原表名 t1
WHERE Job_Key IS NOT NULL
AND EXISTS (
    SELECT 1 FROM 你的原表名 t2 
    WHERE t2.Candidate_Key = t1.Candidate_Key AND t2.Job_Key IS NOT NULL
)

UNION ALL

-- 取全为NULL的分组的第一条NULL记录
SELECT Candidate_Key, MAX(Job_Key) AS Job_Key
FROM 你的原表名 t1
WHERE NOT EXISTS (
    SELECT 1 FROM 你的原表名 t2 
    WHERE t2.Candidate_Key = t1.Candidate_Key AND t2.Job_Key IS NOT NULL
)
GROUP BY Candidate_Key

ORDER BY Candidate_Key;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:00:03