【发布时间】:2015-01-10 08:28:27
【问题描述】:
我想在大于零时获得一列的平均值。
Select Avg(Case when Column > 0 then Column else 0 end) as Avg
但恐怕else 子句不正确。我想忽略平均值中的零值。
【问题讨论】:
标签: sql sql-server case average
我想在大于零时获得一列的平均值。
Select Avg(Case when Column > 0 then Column else 0 end) as Avg
但恐怕else 子句不正确。我想忽略平均值中的零值。
【问题讨论】:
标签: sql sql-server case average
从case statement 中删除else 部分,因此小于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
【讨论】: