我有一张考试成绩表。我需要获得特定参与者的记录并获得他/她的排名。
例如,具有participant_id 15的参与者必须在总共4条记录中具有排名3。所以我要找的结果是:id: 1
exam_id: 3
participant_id: 15
score: 343.23
ranking: 3
我知道我可以通过一些PHP代码获取记录并获得排名,但我想知道这是否可以使用Mysql查询。
我用谷歌搜索,但并没有真正想出一个好的解决方案。任何答案都非常感谢!
答案 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