2012-01-07 68 views
1

我有以下两个表(学生和标记):在student表我有关于学生的信息和在marks表我有关于学生已经得到的标记的信息。现在可以请你告诉我如何找出谁得到最高分,从marks表中计算得到的总分数?如何找出最高的总价值

在此先感谢:)

p.s.有些人可能会发现这个问题重复 - how to find the highest value in mysql table但在我的辩护我的问题是稍有不同。 :)

学生表:

studentid student_name 
1001  Jon Bon Jovi 
1002  Charlie Sheen 
1003  Jason Statham 
... Goes on like this 

商标表:

id studentid totalmark obtainedmark 
1  1001  20   12 
2  1002  20   20 
3  1003  20   15 
4  1001  50   40 
5  1002  50   50 
6  1003  50   45  
... Goes on like this 
+0

哇...查理·辛是非常聪明的获得学生信息。 – cmbuckley 2012-01-07 16:14:40

+0

@cbuckley是的,他是.. :)他是我最喜欢的演员之一。 :) – 2012-01-07 17:23:20

回答

3

这将获得标记的最高和返回的人:

SELECT s.studentid, s.student_name, SUM(m.obtainedmark) as c 
FROM students s INNER JOIN marks m ON s.studentid = m.studentid 
GROUP BY s.studentid 
ORDER BY c DESC 
LIMIT 1 

在你的餐桌展望尽管如此,也许它是更有用的返回最高平均测试sco重新获得返回他们的平均百分比。你可以用下面的方法做到这一点我相信:

SELECT s.userId, s.name, AVG((m.obtainedmark/m.totalmark)) as c 
FROM bnt_users s INNER JOIN bnt_user_skill_rating m ON s.userId = m.user_id 
GROUP BY s.userId 
ORDER BY c DESC 
LIMIT 2; 
+0

非常感谢GordyD。它正在按我想要的方式工作。 :) 谢谢:) – 2012-01-07 17:22:07

0

如果你从标记表中选择了一个结果,它通过获取标记字段(降序)排序。然后你会获得最高分。

SELECT * FROM `marks` ORDER BY `obtainedmark` LIMIT 0, 1 

从这里你可以然后通过使用ID从标识表

1
select s.studentId,s.student_name,sum(m.obtainedmark) as TotalMarks 
from Student s 
inner join Marks m 
on m.studentid=s.studentid 
group by s.studentId,s.student_name 
order by TotalMarks desc 
LIMIT 1