假设我在名为'score'的列中有很多NULL值(缺失值)。我想用一个特定的平均值来替换它们,而不是从列'score'的所有值中替换它们,而是通过我用两个连接的类别的交叉类别构建的组来替换它们:
这种查询适用于按组获取平均值:
SELECT
category1 || ' > ' || category2 AS crosscategory,
ROUND(CAST(AVG(score) AS FLOAT), 2) AS score_avg
FROM DatabaseName.TableName
GROUP BY crosscategory
ORDER BY score_avg;
用一个常量来替换NULL值:
SELECT
NVL(score, 0) AS score_without_missing_values
FROM DatabaseName.TableName
我现在无法解决的问题是如何清晰地用一个常数来替换NULL值,这里的平均值是用AVG和GROUP BY函数计算的。
非常感谢你的帮助!
似乎你想要一个组平均:
SELECT
t.*,
coalesce(score, AVG(score) OVER (PARTITION BY category1, category2)) AS score_avg
FROM DatabaseName.TableName AS t
我删除了ROUND/CAST,因为AVG默认返回FLOAT, ROUND in可能不需要(如果需要,最好转换为DECIMAL)。