TSQL - 列中非零的所有值的平均值

时间:2011-01-20 19:43:26

标签: tsql average

我正在编写报告,并希望获得年龄列的平均值。问题是并非所有行都有年龄。

如果列的值是0 2 4我想要3返回,而不是2.我不能简单地用WHERE排除零行,因为我正在使用这些行中的其他列。是否存在AvgIfNotZero类型的功能?

2 个答案:

答案 0 :(得分:41)

SELECT

    AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END)
    ....

AVG不会考虑NULL值。或者这个

    AVG (NULLIF(Value, 0))

答案 1 :(得分:0)

,(         SELECT AVG(a)FROM

        (
        SELECT NULLIF([Column1], 0)
            UNION ALL
        SELECT  NULLIF([Column2], 0)
            UNION ALL
        SELECT  NULLIF([Column3], 0)
            UNION ALL
        SELECT  NULLIF([Column4], 0)
        ) T (a)
    ) AS [4 Column Average]