SQL Server对多列求行平均值时如何自动跳过NULL空值
SQL Server 行级多列跳过NULL计算平均值方案
适用所有SQL Server版本的通用写法
直接通过更新语句填充I列,自动跳过NULL值计算有效值平均:
UPDATE 你的实际表名 SET I = ( -- 计算所有非NULL值的总和 ISNULL(C, 0) + ISNULL(D, 0) + ISNULL(E, 0) + ISNULL(F, 0) + ISNULL(G, 0) + ISNULL(H, 0) ) / NULLIF( -- 统计非NULL值的数量,全为NULL时返回NULL避免除以0报错 CASE WHEN C IS NOT NULL THEN 1 ELSE 0 END + CASE WHEN D IS NOT NULL THEN 1 ELSE 0 END + CASE WHEN E IS NOT NULL THEN 1 ELSE 0 END + CASE WHEN F IS NOT NULL THEN 1 ELSE 0 END + CASE WHEN G IS NOT NULL THEN 1 ELSE 0 END + CASE WHEN H IS NOT NULL THEN 1 ELSE 0 END , 0)
逻辑说明:
- 你提到的阿尔巴尼亚对应行C、D、E、F均为NULL时,分母统计结果为2(仅G、H非NULL),分子为G+H的和,计算结果就是两列的平均值,符合需求
- 若C到H列全为NULL,运算结果会自动返回NULL,不会触发除以0报错
SQL Server 2022+ 简化写法
高版本可通过行构造器+原生AVG函数实现,写法更简洁,原生AVG天然忽略NULL:
UPDATE 你的实际表名 SET I = ( SELECT AVG(col) FROM (VALUES(C),(D),(E),(F),(G),(H)) AS v(col) )
使用时将代码中的你的实际表名替换为你业务中对应的表名即可。
内容的提问来源于stack exchange,提问作者Tejaswini
相关产品推荐
相关产品推荐

