为了账号安全,请及时绑定邮箱和手机立即绑定

mysql对数据统计后实现排名

mysql对数据统计后实现排名

PHP
皈依舞 2019-03-12 16:17:25
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 回答

?
紫衣仙女

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
查看完整回答
反对 回复 2019-03-18
?
慕沐林林

TA贡献2016条经验 获得超9个赞

你是想对答题数目 和 时间 分别赋予不同权重么.
像你这种排序, 它是优先第一位的
就好比

A    B
20   5
19   9999

不管你B有多大, 你的A比别人小它永远在后面

查看完整回答
反对 回复 2019-03-18
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-18
?
HUWWW

TA贡献1874条经验 获得超12个赞

redis sorted set

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 653 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信