获取记录详细信息并计算排名

时间:2016-04-21 05:38:16

标签: mysql

我有一张考试成绩表。我需要获得特定参与者的记录并获得他/她的排名。

enter image description here

例如,具有participant_id 15的参与者必须在总共4条记录中具有排名3。所以我要找的结果是:

id: 1
exam_id: 3
participant_id: 15
score: 343.23
ranking: 3

我知道我可以通过一些PHP代码获取记录并获得排名,但我想知道这是否可以使用Mysql查询。

我用谷歌搜索,但并没有真正想出一个好的解决方案。任何答案都非常感谢!

3 个答案:

答案 0 :(得分:1)

这是postgresql和其他数据库中的row_number函数,遗憾的是它不存在于mysql中。

本文http://www.mysqltutorial.org/mysql-row_number/解释了如何在mysql中模拟它

改编它的例子

SET @row_number = 0;

SELECT 
    (@row_number:=@row_number + 1) AS rank, id, participant_id,exam_id, score 
FROM
    exams
LIMIT 5;

答案 1 :(得分:0)

以下查询将为您提供所需的结果

select t2.id,t2.exam_id,t2.exam_id,t2.participant_id,t2.score,t2.ranking from
(SELECT t.id,t.exam_id,t.participant_id,t.score,(@num:=@num+1) AS
 ranking  FROM table1 t cross join (SELECT @num:=0) AS dummy 
 ORDER BY t.score desc)as t2 where t2.participant_id=15;

答案 2 :(得分:0)

您可以运行查询以创建单独的结果表,然后添加条件以获得所需参与者的排名。

这是您可以尝试的查询

SELECT * FROM (SELECT re.*, @curRow := @curRow + 1 AS rank
FROM results re JOIN (SELECT @curRow := 0) r
WHERE 1 ORDER BY re.`score` DESC) AS tablea
WHERE participant_id=15

这是结果

id exam_id participant_id score  rank
1  3       15             343.23 3