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

如何筛选数据行:存在非空值时排除null,全为null则保留

数据清洗需求与简便解决方案

原始数据表

key1 value1
key1 value2
key1 null
key2 null
key3 null
key3 value

期望结果表

key1 value1
key1 value2
key2 null
key3 value

核心需求拆解

简单总结规则:

  • 保留所有value不为null的行
  • 若某个key对应的所有value都是null,则保留该key的null行
  • 若key下存在非null的value,直接剔除该key的null行

简便解决方案(以SQL为例)

用窗口函数可以一步到位,无需单独统计总行数和null行数:

方案1:基于非null值计数判断

SELECT key, value
FROM (
    SELECT 
        key, 
        value,
        -- 统计当前key下非null值的数量
        COUNT(CASE WHEN value IS NOT NULL THEN 1 END) OVER (PARTITION BY key) AS non_null_cnt
    FROM your_table
) t
-- 过滤规则:要么value非null,要么该key没有任何非null值
WHERE value IS NOT NULL OR non_null_cnt = 0;

方案2:基于是否存在非null值判断

SELECT key, value
FROM (
    SELECT 
        key, 
        value,
        -- 标记当前key是否存在非null值(1=存在,0=不存在)
        MAX(CASE WHEN value IS NOT NULL THEN 1 ELSE 0 END) OVER (PARTITION BY key) AS has_non_null
    FROM your_table
) t
WHERE value IS NOT NULL OR has_non_null = 0;

这两种方法通过窗口函数给每一行打上所属key的非null值状态标记,再通过过滤条件直接得到目标结果,逻辑清晰且效率较高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:49:58