我有一個MySQL表即 如何找到在MySQL表中的最高值
st_id | name | email | maths | chemistry | bio | social_study 1 | john |@a.com | 20 | 23 | 10 | 15
我的問題是我怎麼能找到的最高科目分數,倒數第二等
注意,所有的學科領域有一個整型(11)值
我有一個MySQL表即 如何找到在MySQL表中的最高值
st_id | name | email | maths | chemistry | bio | social_study 1 | john |@a.com | 20 | 23 | 10 | 15
打破數據庫到像3個表:
名學生:
st_id | name | email
1 | john |@a.com
課程:
cr_id | name
1 | maths
2 | chemistry
3 | bio
4 | social_studies
StudentCourses:
st_id | cr_id | score
1 | 1 | 20
1 | 2 | 23
1 | 3 | 10
1 | 4 | 15
現在你可以這樣做:
SELECT s.name, MAX(sc.score) FROM Students s INNER JOIN StudentCourses sc ON s.st_id = sc.st_id;
最好的答案。現在您可以快速修改課程列表,而無需更改您的查詢。另外,可能會將時間戳字段添加到「StudentCourses」表中,以便按日期選擇分數 – biakaveron 2011-03-30 05:15:50
@aroth完成的操作稱爲「規範化」。 – 2011-03-30 05:32:33
SELECT * FROM <table>
ORDER BY <field> DESC
LIMIT <needed number of rows>
實施例:
SELECT * FROM <table>
ORDER BY maths+chemistry+bio+social_study DESC
LIMIT 3
嚴格PHP方法:我假設你想維護與字段名稱的關聯。在這種情況下,假設您將該行作爲數組提取,則只需在查詢結果的每一行上使用asort($row);
即可。 asort
會將數組從最低值排序到最高值(如果需要,可使用其他標誌來調整結果),同時保留鍵。 A foreach
循環將允許您按排序順序處理每個鍵/值對。
st_id | name | email | maths | chemistry | bio | social_study
1 | john |@a.com | 20 | 23 | 10 | 15
查詢可以爲最高分
SELECT id,GREATEST(mark,mark1,mark2) AS `top` FROM `students`
喜檢查我的回答太 – Harish 2011-03-30 06:24:18