我希望列大于零时的平均值。
Select Avg(Case when Column > 0 then Column else 0 end) as Avg
但我担心else
条款不正确。我想忽略平均值中的零值。
答案 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