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

Average and case in SQL Server 2012

我想要列大于零时的平均值。

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

但恐怕 else 子句不正确。我想忽略平均值中的零值。

case statement 中删除 else 部分,因此小于 1 的值将是 NULL.

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

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

演示版

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

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