计算SQL中忽略空值的4个数字的平均值
我想计算 SQL 中 4 个数字的平均值。条件是如果 4 个数字中的任何一个为空,则不应考虑这些数字来计算平均值
像 (12,null,null,3) 应该给出 15/2 = 7.5 列表中的任何数字都可以为空
回答
您可以使用VALUEStable-value 构造函数对值进行逆透视,然后使用 获得值的平均值AVG()。该AVG()函数将忽略这些NULL值:
SELECT AVG(x)
FROM (VALUES (12.0), (NULL), (NULL), (3.0)) v (x)
如果值存储在表中,则需要额外的APPLY运算符:
SELECT *
INTO Data
FROM (VALUES
(12.0, NULL, NULL, 5.0),
(NULL, NULL, NULL, NULL),
(1, 1, 1, 10.0)
) d (Col1, Col2, Col3, Col4)
SELECT *
FROM Data d
OUTER APPLY (
SELECT AVG(Col) AS Col
FROM (VALUES
(d.Col1), (d.Col2), (d.Col3), (d.Col4)
) v (Col)
) a
结果:
Col1 Col2 Col3 Col4 Col
-----------------------------
12.0 null null 5.0 8.500000
null null null null null
1.0 1 1 10.0 3.250000