2014-10-09 174 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功能。