首页 > 解决方案 > SQL - 具有平均值的数据输入

问题描述

我目前正在尝试使用 SQL 语句输入数据(我对 SQL 不是很熟悉)。我有一个带有空值的数据集,我试图用整个变量的平均值替换空值。我正在尝试这样的声明(我正在使用 MS SQL):

SELECT x1,
       CASE
         WHEN x1 IS NULL THEN AVG(x1)
         ELSE x1
       END AS x1
  FROM dbo.data

它返回一个错误:

列 'dbo.data.x1' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

当我将 AVG 值更改为例如 1 - 它正在工作并且当我添加 group by 时,它只显示没有空值的值。

这可能是一个愚蠢的问题,但可以在这里做这样的输入吗?正如我提到的,我完全是业余爱好者,需要一些帮助和提示!

谢谢,

汤姆

标签: sqlsql-serverinput

解决方案


我建议使用coalesce()而不是case. 它是更多的锥体:

select d.*,
       coalesce(x1, avg(x1) over ()) as imputed_x1
from data d;

推荐阅读