mysql对数据统计后实现排名

1、需求是统计用户答题的榜单,用户答题的数据表存了用户id,答题题目和答题时间,现在需要根据答题数和答题时间进行统计和得到排名。
2、之前尝试使用了以下方法进行统计

SET @counter=0;
select @counter:=@counter+1 AS rank,uid,count(*) answercount,sum(finishtime) timestampsum  from huiyi_answer_record group by uid order by answercount DESC,timestampsum ASC limit 0,10;    

然后发现排名只依赖第一个Order条件,当第二个条件导致顺序改变的时候排名依旧没有改变。
3、问题1:请问应该怎么正确对统计后的数据进行排名(有分页)?
4、问题2:请问在每次分页下,怎么能直接得到某个用户的排名和数据?

5、补充测试结果。如图,mysql返回的结果排序是正确的,但rank不对。
https://img2.mukewang.com/5c8f68310001caf208000303.jpg

皈依舞
浏览 654回答 5
5回答

紫衣仙女

用子查询 SET @counter=0; select t2.* from ( select t1.*,@counter:=@counter+1 AS rank from ( select uid,count(*) answercount,sum(finishtime) timestampsum from huiyi_answer_record group by uid order by answercount DESC,timestampsum asc ) as t1 ) as t2 limit 2,2; # 或者 SET @counter=2; #查询第二页,假如每页2条,起始值就是2 select t1.*,@counter:=@counter+1 AS rank from ( select uid,count(*) answercount,sum(finishtime) timestampsum from huiyi_answer_record group by uid order by answercount DESC,timestampsum asc ) as t1 limit 2,2

慕沐林林

你是想对答题数目 和 时间 分别赋予不同权重么.像你这种排序, 它是优先第一位的就好比 A B 20 5 19 9999 不管你B有多大, 你的A比别人小它永远在后面

噜噜哒

第二排序是当第一个排序的字段相同时才会生效

HUWWW

redis sorted set
打开App,查看更多内容
随时随地看视频慕课网APP