删除重复product_id下的NULL描述行(保留有效行及唯一NULL行)
数据清洗规则与实现
处理规则
- 若某
product_id存在非NULL的product_description记录,删除该product_id下所有product_description为NULL的行,仅保留含描述的行(例:删除ROW_ID = 1,保留ROW_ID = 2) - 若某
product_id仅存在product_description为NULL的记录,则保留该行(例:保留ROW_ID = 3)
原数据表
| row_id | product_id | product_description | time_stamp |
|---|---|---|---|
| 1 | 000001 | null | 2012-12-22 20:00:00 |
| 2 | 000001 | 商品描述 | 2012-12-23 21:00:00 |
| 3 | 000002 | null | 2012-12-23 21:00:00 |
期望结果表
| row_id | product_id | product_description | time_stamp |
|---|---|---|---|
| 2 | 000001 | 商品描述 | 2012-12-23 21:00:00 |
| 3 | 000002 | null | 2012-12-23 21:00:00 |
实现方案(SQL)
使用窗口函数统计每个product_id下非空描述的行数,再筛选符合规则的记录:
WITH product_desc_stats AS ( SELECT *, COUNT(CASE WHEN product_description IS NOT NULL THEN 1 END) OVER (PARTITION BY product_id) AS non_null_desc_count FROM your_table ) SELECT row_id, product_id, product_description, time_stamp FROM product_desc_stats WHERE product_description IS NOT NULL OR non_null_desc_count = 0;
逻辑说明
- 借助CTE(
product_desc_stats)计算每个product_id下存在非空描述的记录数量 - 筛选条件:要么当前行的描述不为空,要么该
product_id下没有任何非空描述(保留唯一的空描述行)
内容的提问来源于stack exchange,提问作者cwfmoore
相关产品推荐
相关产品推荐

