SQL Server 2012中的平均值和大小写

时间:2015-01-10 08:28:27

标签: sql sql-server case average

我希望列大于零时的平均值。

Select Avg(Case when Column > 0 then Column else 0 end) as Avg

但我担心else条款不正确。我想忽略平均值中的零值。

1 个答案:

答案 0 :(得分:7)

else移除case statement部分,因此小于1的值将为NULL

Null值将被Avg aggregate消除。因此,您将获得大于0的平均值。试试这个。

Select Avg(Case when [Column]>0 then [Column] end) as [Avg]

<强>样本

else(预期平均值)中没有case statement部分

SELECT Avg(CASE WHEN a > 0 THEN a END) [Avg]
FROM   (SELECT 2 a UNION ALL SELECT 2 UNION ALL SELECT -1) bb

结果:2

else部分放入case statement

SELECT Avg(CASE WHEN a > 0 THEN a ELSE 0 END) [Avg]
FROM   (SELECT 2 a UNION ALL SELECT 2 UNION ALL SELECT -1) bb 

结果:1