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

基于AssetName动态填充AssetCategoryName空值 - PySpark

解决AssetCategoryName空值动态填充问题

核心思路

利用分组聚合或窗口函数,为每个AssetName提取其对应的唯一非空AssetCategoryName,再将空值替换为该值。以下是主流数据库的实现方案:

SQL Server 实现

使用窗口函数MAX()(因每个AssetName对应唯一非空分类,MAX会精准取到该值):

SELECT 
    AssetName,
    COALESCE(AssetCategoryName, MAX(AssetCategoryName) OVER (PARTITION BY AssetName)) AS AssetCategoryName
FROM YourTableName;

MySQL 实现

8.0+ 版本(支持窗口函数)

SELECT 
    AssetName,
    COALESCE(AssetCategoryName, MAX(AssetCategoryName) OVER (PARTITION BY AssetName)) AS AssetCategoryName
FROM YourTableName;

5.x 版本(无窗口函数)

用关联子查询预存每个AssetName的有效分类:

SELECT 
    t1.AssetName,
    COALESCE(t1.AssetCategoryName, t2.AssetCategoryName) AS AssetCategoryName
FROM YourTableName t1
LEFT JOIN (
    SELECT AssetName, MAX(AssetCategoryName) AS AssetCategoryName
    FROM YourTableName
    WHERE AssetCategoryName IS NOT NULL
    GROUP BY AssetName
) t2 ON t1.AssetName = t2.AssetName;

PostgreSQL 实现

方案1:MAX窗口函数

SELECT 
    AssetName,
    COALESCE(AssetCategoryName, MAX(AssetCategoryName) OVER (PARTITION BY AssetName)) AS AssetCategoryName
FROM YourTableName;

方案2:FIRST_VALUE窗口函数

强制优先取非空值:

SELECT 
    AssetName,
    COALESCE(AssetCategoryName, FIRST_VALUE(AssetCategoryName) OVER (
        PARTITION BY AssetName 
        ORDER BY AssetCategoryName IS NULL
    )) AS AssetCategoryName
FROM YourTableName;

前置验证

先排查是否存在无有效分类的AssetName(这类空值无法通过动态填充解决):

SELECT AssetName
FROM YourTableName
GROUP BY AssetName
HAVING MAX(AssetCategoryName) IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:02:57