作者bkk (.....)
看板Database
标题[SQL ] 算10题相加平均值
时间Mon Nov 8 11:10:04 2010
目前在做一个问卷分数的计算
问卷一共有10题 分数个别是
非常不满意:1
不满意:2
尚可:3
满意:4
非常满意:5
资料库栏位则有题目1到题目10以及平均分数
我现在想要把10题的分数加起来後算平均值
目前的SQL语法如下
UPDATE dbo.Q_问卷一 set 平均分数 =
(题目1+ 题目2+题目3+题目4+题目5+题目6+题目7+题目8+题目9+题目10)/10
问题来了 现在我要把分数为1的题目去掉 不纳入平均值计算
例如:题目1为1 那平均分数就是 (题目2+到题目10)/9
题目1跟2为1 那平均分数就是 (题目3+到题目10)/8
我有认真想过 不过实在是没概念
我甚至想说用土法炼钢的方式 写好几百种当题目x=1的条件去判断(实在是蠢的可以= =)
拜托大家帮个忙了 感谢!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.118.220.117
1F:推 yumark:可以写个Function 绑在AVG的栏位上。 11/08 15:57
2F:→ yumark:然後再fn里面加where not in 1 就可以了,这是MSSQL作法。 11/08 16:01
我有用AVG然後where 题目X>1 写法如下:
UPDATE dbo.Q_问卷一 set 平均分数 =
(select AVG(题目1) from dbo.Q_问卷一 where 题目1>1)
不过这样写是计算所有作答者在题目1的平均(每一栏),
我还需要单笔作答者题目1到10的平均(每一列)
可能言不及意 不过还是谢谢大家的帮忙
3F:推 yumark:可以比较完整的去叙说资料特徵吗?只丢你的update我无理解:( 11/09 01:30
4F:→ yumark:我比较想了解的是你的题目1是一条栏还是一个关联表? 11/09 01:35
5F:→ yumark:仔细看了一下,你的题目一到十好像是栏位,然而你要求的是 11/09 01:49
6F:→ yumark:一个tuple的平均值,并且去除是1的项目是吗? 11/09 01:58
7F:→ yumark:依我见解可能需要把每一列变成栏,然後where > 1 在AVG即可 11/09 02:08
※ 编辑: bkk 来自: 120.118.220.117 (11/10 12:48)