SQL 求平均值问题 !

tianzhenbo 2008-03-21 09:31:35
求一行的平均值格式如下:
字段1 字段2 字段3 字段4 字段5
1 2 3 NUll NULL
结果是:(1+2+3)/3 = 2
NULL的字段不取
...全文
708 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
青锋-SS 2008-03-21
前端的程序也不健壮
回复
青锋-SS 2008-03-21
[Quote=引用 15 楼 tianzhenbo 的回复:]
引用 13 楼 dobear_0922 的回复:
晕,已经结贴了,,,
如果有一行全为null,就会出现0/0,编译器会报错,sdhylj,dawugui,wzy_love_sly都没考虑这种情况,,,

------------------------------
说的是,结贴了 不好意思 要不再开个贴把分给你 呵呵
[/Quote]这样的记录一般情况下不是存在的,如果这样的话,数据库设计就有问题了.
回复
tianzhenbo 2008-03-21
[Quote=引用 13 楼 dobear_0922 的回复:]
晕,已经结贴了,,,
如果有一行全为null,就会出现0/0,编译器会报错,sdhylj,dawugui,wzy_love_sly都没考虑这种情况,,,
[/Quote]
------------------------------
说的是,结贴了 不好意思 要不再开个贴把分给你 呵呵
回复
dobear_0922 2008-03-21
create table tb(字段1 int, 字段2 int, 字段3 int, 字段4 int, 字段5 int)
insert tb select 1, 2, 3, NUll, NULL
union all select 1,2,3,4,5
union all select null,null,null,null,null

select case (isnull(字段1,0)+isnull(字段2,0)+isnull(字段3,0)+isnull(字段4,0)+isnull(字段5,0))
when 0 then 0
else (isnull(字段1,0)+isnull(字段2,0)+isnull(字段3,0)+isnull(字段4,0)+isnull(字段5,0))
/(isnumeric(字段1)+isnumeric(字段2)+isnumeric(字段3)+isnumeric(字段4)+isnumeric(字段5))
end as average
from tb

/*
average
-----------
2
3
0

(3 row(s) affected)
*/

drop table tb
回复
dobear_0922 2008-03-21
晕,已经结贴了,,,
如果有一行全为null,就会出现0/0,编译器会报错,sdhylj,dawugui,wzy_love_sly都没考虑这种情况,,,
回复
wobencm 2008-03-21
呵呵,结帖...
回复
dobear_0922 2008-03-21
--try
create table tb(字段1 int, 字段2 int, 字段3 int, 字段4 int, 字段5 int)
insert tb select 1, 2, 3, NUll, NULL
union all select 1,2,3,4,5
union all select null,null,null,null,null

select case (isnull(字段1,0)+isnull(字段2,0)+isnull(字段3,0)+isnull(字段4,0)+isnull(字段5,0))
when 0 then 0
else (isnull(字段1,0)+isnull(字段2,0)+isnull(字段3,0)+isnull(字段4,0)+isnull(字段5,0))
/(5-isnull(nullif(isnull(字段1,1), 字段1), 0)-isnull(nullif(isnull(字段2,1), 字段2), 0)
-isnull(nullif(isnull(字段3,1), 字段3), 0)-isnull(nullif(isnull(字段4,1), 字段4), 0)
-isnull(nullif(isnull(字段5,1), 字段5), 0))
end as average
from tb

/*
average
-----------
2
3
0

(3 row(s) affected)
*/

drop table tb
回复
tianzhenbo 2008-03-21
不好意思,结贴了没看到你的回复
回复
tianzhenbo 2008-03-21
谢谢 大家 结贴了 呵呵
糊涂了忘了case when 了 哈哈!!
回复
dawugui 2008-03-21
create table tb(字段1 int, 字段2 int, 字段3 int , 字段4 int , 字段5 int)
insert into tb values( 1 , 2 , 3 , NUll, NULL )

select myavg =
(isnull(字段1,0) + isnull(字段2,0) + isnull(字段3,0) + isnull(字段4,0) + isnull(字段5,0))/
(case when 字段1 is not null then 1 else 0 end +
case when 字段2 is not null then 1 else 0 end +
case when 字段3 is not null then 1 else 0 end +
case when 字段4 is not null then 1 else 0 end +
case when 字段5 is not null then 1 else 0 end)
from tb

drop table tb

/*
myavg
-----------
2

(所影响的行数为 1 行)
*/
回复
wzy_love_sly 2008-03-21
declare @tb table (字段1 int,字段2 int,字段3 int,字段4 int,字段5 int)
insert into @tb select 1,2,3,null,null

select
sum(isnull(字段1,0)+isnull(字段2,0)+isnull(字段3,0)+isnull(字段4,0)+isnull(字段5,0))/
sum(case when 字段1 is null then 0 else 1 end +
case when 字段2 is null then 0 else 1 end +
case when 字段3 is null then 0 else 1 end +
case when 字段4 is null then 0 else 1 end +
case when 字段5 is null then 0 else 1 end ) as '平均数'
from @tb


回复
tianzhenbo 2008-03-21
奥,这样好像可以 呵呵,谢谢了!
回复
utpcb 2008-03-21
select isnull(col1,0)+isnull(col2,0)+isnull(col3,0)+isnull(col4,0)+isnull(col5,0)/(case when col1 is null then 0 else 1 end + case when col2 is null then 0 else 1 end + case when col3 is null then 0 else 1 end + case when col4 is null then 0 else 1 end + case when col4 is null then 0 else 1 end + case when col5 is null then 0 else 1 end)
就这么办
回复
dawugui 2008-03-21
求一行的平均值格式如下:
字段1 字段2 字段3 字段4 字段5
1 2 3 NUll NULL
结果是:(1+2+3)/3 = 2
NULL的字段不取
----

select
(isnull(字段1,0) + isnull(字段2,0) + isnull(字段3,0) + isnull(字段4,0) + isnull(字段5,0))/
(case when 字段1 is not null then 1 else 0 end +
case when 字段2 is not null then 1 else 0 end +
case when 字段3 is not null then 1 else 0 end +
case when 字段4 is not null then 1 else 0 end +
case when 字段5 is not null then 1 else 0 end)
from tb
回复
tianzhenbo 2008-03-21
恩,不知道分母怎么弄
回复
青锋-SS 2008-03-21
select isnull(col1,0)+isnull(col2,0)+isnull(col3,0)+isnull(col4,0)+isnull(col5,0)/(case when col1 is null then 0 else 1 end + case when col2 is null then 0 else 1 end + case when col3 is null then 0 else 1 end + case when col4 is null then 0 else 1 end + case when col4 is null then 0 else 1 end + case when col5 is null then 0 else 1 end)
回复
青锋-SS 2008-03-21
貌似有些难度
这样就把分母不好弄
select isnull(col1,0)+isnull(col2,0)+isnull(col3,0)+isnull(col4,0)+isnull(col5,0)/?
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-21 09:31
社区公告
暂无公告