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不对。
5 回答
![?](http://img1.sycdn.imooc.com/545850ee0001798a02200220-100-100.jpg)
紫衣仙女
TA贡献1839条经验 获得超15个赞
用子查询
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
![?](http://img1.sycdn.imooc.com/545865470001bf9402200220-100-100.jpg)
慕沐林林
TA贡献2016条经验 获得超9个赞
你是想对答题数目 和 时间 分别赋予不同权重么.
像你这种排序, 它是优先第一位的
就好比
A B
20 5
19 9999
不管你B有多大, 你的A比别人小它永远在后面
- 5 回答
- 0 关注
- 653 浏览
添加回答
举报
0/150
提交
取消