2014-10-09 163 views
1

每一行作为一个例子,我都会有这样的表从MySQL计算平均为SQL

Id | Name | Grade 1 | Grade 2 | Average 

1. | Jack | 9  | 10  | 
2. | Jimmy | 9  | 8  | 
2. | Emmy | 9  | 7  | 

所以,在平均场从这个表,我需要计算从甲级AVERAGE 12级字段。我尝试了很多可能性,我知道它们是错误的:

UPDATE table_name SET Average=AVG(Grade 1 + Grade 2) 

我有办法做到这一点吗?谁能帮我?谢谢!

+2

因为找到数据的平均值,所以不需要执行AVG()。既然你需要做2个colums,并且@JohnConde建议尝试'set average = round((grade1 + grade2)/ 2)',那么这个工作就应该完成了。如果你不需要四舍五入,那么只需删除一轮函数 – 2014-10-09 14:27:52

+1

@JohnConde,如果使用'AVG'函数''2''是多余的。 – Alnitak 2014-10-09 14:28:22

+3

'AVG()'是一个计算所有行的平均值的集合函数,它不是用于计算一行内的平均值。 – Barmar 2014-10-09 14:29:59

回答

1

您需要将字段一起添加并除以字段数。如果您的Average字段为DECIMAL类型,则您甚至不需要指定ROUND函数。任何小数超出声明只会被截断(SQL Fiddle):

UPDATE table_name 
SET AVERAGE = (grade1 + grade2)/2; 

在你的榜样,你只有两个字段,你得到的平均值。所以Average decimal(3,1)会为你工作,因为最小的部分将是.5。所以显然不需要ROUND功能。