MS SQL 求平均值

u010703853 2014-05-22 02:47:24
如何求每一列、每一行的平均值 。为0 的话 就不参与计算
如下:

Name num1 num2 num 3
张三 2 2 2
李四 4 4 4
王二 6 6 6
老大 0 4 12



我要得到的结果是


Name num1 num2 num 3 AVG_Y
张三 2 2 2 2
李四 4 4 4 4
王二 6 6 6 6
老大 0 4 12 8
AVG_X 4 4 6 4.7

请问以上怎么实现呢、、、、、



...全文
168 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangyehpu 2014-05-23
  • 打赏
  • 举报
回复
7楼的应该像6楼的那样加上总和不等于0的条件
唐诗三百首 2014-05-22
  • 打赏
  • 举报
回复

create table u01
(Name varchar(10),num1 int,num2 int,num3 int)

insert into u01
 select '张三',2,2,2 union all
 select '李四',4,4,4 union all
 select '王二',6,6,6 union all
 select '老大',0,4,12


with t as
(select Name,num1,num2,num3,
        (num1+num2+num3)/
        (case when num1<>0 then 1 else 0 end+
         case when num2<>0 then 1 else 0 end+
         case when num3<>0 then 1 else 0 end) 'AVG_Y'     
 from u01)
select Name,num1,num2,num3,AVG_Y from t 
union all
select 'AVG_X',
       sum(num1)/sum(case when num1<>0 then 1 else 0 end),
       sum(num2)/sum(case when num2<>0 then 1 else 0 end),
       sum(num3)/sum(case when num3<>0 then 1 else 0 end),
       cast((sum(num1)/sum(case when num1<>0 then 1 else 0 end)+
              sum(num2)/sum(case when num2<>0 then 1 else 0 end)+
              sum(num3)/sum(case when num3<>0 then 1 else 0 end))/3.0 as decimal(5,1))
 from t

/*
Name       num1        num2        num3        AVG_Y
---------- ----------- ----------- ----------- ---------
张三         2           2           2           2.0
李四         4           4           4           4.0
王二         6           6           6           6.0
老大         0           4           12          8.0
AVG_X      4           4           6           4.7

(5 row(s) affected)
*/
giftzheng 2014-05-22
  • 打赏
  • 举报
回复
select Name,num1,num2,num3,(num1+num2+num3)/ (case when num1=0 then 0 else 1.0 end + case when num2=0 then 0 else 1.0 end + case when num3=0 then 0 else 1.0 end ) as AVG_Y from 表名 where num1+num2+num3<>0
KeepSayingNo 2014-05-22
  • 打赏
  • 举报
回复
num1、num2、num3三列分别求好,然后将原表插入临时表,再将AVG_X 和算好的列平均值插入临时表,最后对临时表进行查询,求行的平均值
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
列数固定不?
是的 列数和行数固定 就是获取 行和列的 平均值 注意:如果为0 就不参与计算平均值 这个地方有一个判断....... 各位大侠 有好的方法吗?
  • 打赏
  • 举报
回复
引用 2 楼 ap0405140 的回复:
老大 0 4 12 8 请问以上这行的平均值为何是8?
4+12 在除以2 因为第一项为0 不参与技术 排除在外....
唐诗三百首 2014-05-22
  • 打赏
  • 举报
回复
老大 0 4 12 8 请问以上这行的平均值为何是8?
發糞塗牆 2014-05-22
  • 打赏
  • 举报
回复
列数固定不?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧