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

如何筛选同一id对应数据中指定列取值为非null的行

同ID下指定列非空行筛选方案

以下是两种不同业务场景的实现SQL,你可以按需选择:

场景1:仅保留指定列非空的记录

如果不需要保留无任何非空指定列的ID对应数据,直接用WHERE条件过滤即可:

SELECT * 
FROM 你的表名
WHERE 待判断的指定列名 IS NOT NULL;

场景2:每个ID至少保留1条记录

如果需要覆盖全量ID,某ID下有非空指定列则优先取非空行,全为空则保留任意一行,用窗口函数实现:

WITH 排序后的数据 AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY id 
            ORDER BY CASE WHEN 待判断的指定列名 IS NOT NULL THEN 0 ELSE 1 END
        ) AS 排序编号
    FROM 你的表名
)
-- 不需要保留排序编号字段的话,把*替换为实际需要查询的字段列表即可
SELECT * 
FROM 排序后的数据
WHERE 排序编号 = 1;

提示:如果同一ID下存在多条指定列非空的记录,你可以在窗口函数的ORDER BY子句后追加其他排序规则,控制最终取哪条非空记录。

参考说明

  • 你提供的示例表结构如下:
    示例表结构
  • 上述方案输出结果和你预期的效果一致:
    预期输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:54:01