回 帖 发 新 帖 刷新版面

主题:如何对多列数据求平均?

如果要同时对以下4列求平均,其中无效值用32744表示,该如何剔除无效值呢?

1001    6436    5153    32744
2005    6747    4656    32744
3045    32744    5777    7487
5565    6457    32744    2342

我用avg函数可以对每列单独求平均,但是同时求平均就不行了,这是为何啊?

回复列表 (共1个回复)

沙发

declare @t table(a int,b int,c int,d int)
insert into @t
select 1001,6436,5153,32744
union all
select 2005,6747,4656,32744
union all
select 3045,32744,5777,7487
union all
select 5565,6457,32744,2342


select 

 avg(case when a=32744 then 0 else a end
 +case when b=32744 then 0 else b end
 +case when c=32744 then 0 else c end
 +case when d=32744 then 0 else d end)
/
sum(case when a=32744 then 0 else 1 end
 +case when b=32744 then 0 else 1 end
 +case when c=32744 then 0 else 1 end
 +case when d=32744 then 0 else 1 end)
as [avg(a+b+c+d)]
from @t

我来回复

您尚未登录,请登录后再回复。点此登录或注册