PySpark如何按id分组判断是否含null值并衍生新列
SQL分组内是否存在NULL值判断实现
需求说明
现有包含id、Feature两列的表,需要新增Contains null列,规则如下:
- 同一id对应的所有行中,只要任意一行
Feature值为NULL,则该id下所有行的Contains null值为True - 若同一id对应的所有行
Feature都不为NULL,则该id下所有行的Contains null值为False
实现方案
方案1:窗口函数实现(支持MySQL8.0+/PostgreSQL/SQL Server/Oracle等主流数据库)
SELECT id, Feature, MAX(CASE WHEN Feature IS NULL THEN 1 ELSE 0 END) OVER (PARTITION BY id) = 1 AS `Contains null` FROM 你的表名;
方案2:关联子查询实现(兼容不支持窗口函数的低版本数据库,如MySQL5.x)
SELECT t.id, t.Feature, CASE WHEN EXISTS (SELECT 1 FROM 你的表名 t2 WHERE t2.id = t.id AND t2.Feature IS NULL) THEN 'True' ELSE 'False' END AS `Contains null` FROM 你的表名 t;
逻辑说明
两种方案的核心逻辑一致:判断每个id分组内是否存在Feature IS NULL的记录,存在则全组标记为True,否则标记为False。
内容的提问来源于stack exchange,提问作者MichiganMagician
相关产品推荐
相关产品推荐

