• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码
    POST TIME:2021-10-18 20:45

    前言

    本文主要介绍了关于MYSQL实现排名及查询指定用户排名功能(并列排名功能)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

    表结构:

    CREATE TABLE test.testsort (
     
    id int(11) NOT NULL AUTO_INCREMENT,
     
    uid int(11) DEFAULT 0 COMMENT '用户id',
     
    score decimal(10, 2) DEFAULT 0.00 COMMENT '分数',
     
    PRIMARY KEY (id)
     
    )
     
    ENGINE = INNODB
     
    AUTO_INCREMENT = 1
     
    CHARACTER SET utf8
     
    COLLATE utf8_general_ci
     
    COMMENT = '测试排序'
     
    ROW_FORMAT = DYNAMIC;

    思路:可以先排序,再对结果进行编号;也可以先查询结果,再排序编号。

    说明:

    @rownum := @rownum + 1 中 := 是赋值的作用,这句话的意思是先执行@rownum + 1,然后把值赋给@rownum;

    (SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0,即编号从1开始。

    实现排名:

    方法一:

    SELECT t.*, @rownum := @rownum + 1 AS rownum
     
    FROM (SELECT @rownum := 0) r, (SELECT * FROM testsort ORDER BY score DESC) AS t;

    方法二:

    SELECT t.*, @rownum := @rownum + 1 AS rownum
     
    FROM (SELECT @rownum := 0) r, testsort AS t
     
    ORDER BY t.score DESC;

    结果:

     

    查看指定用户排名:

    方法一:

    SELECT b.* FROM
     
    (
     
    SELECT t.*, @rownum := @rownum + 1 AS rownum
     
    FROM (SELECT @rownum := 0) r,
     
    (SELECT * FROM testsort ORDER BY score DESC) AS t
     
    ) AS b WHERE b.uid = 222;

    方法二:

    SELECT b.* from
     
    (
     
    SELECT t.*, @rownum := @rownum + 1 AS rownum
     
    FROM (SELECT @rownum := 0) r, testsort AS t
     
    ORDER BY t.score DESC
     
    ) as b where b.uid = 222;

    结果:

    实现并列排名(相同分数排名相同):

    SELECT
     
    obj.uid,
     
    obj.score,
     
    CASE
     
    WHEN @rowtotal = obj.score THEN
     
    @rownum
     
    WHEN @rowtotal := obj.score THEN
     
    @rownum :=@rownum + 1
     
    WHEN @rowtotal = 0 THEN
     
    @rownum :=@rownum + 1
     
    END AS rownum
     
    FROM
     
    (
     
    SELECT
     
    uid,
     
    score
     
    FROM
     
    testsort
     
    ORDER BY
     
    score DESC
     
    ) AS obj,
     
    (SELECT @rownum := 0 ,@rowtotal := NULL) r

    查询指定用户并列排名:

    SELECT total.* FROM
     
    (SELECT
     
    obj.uid,
     
    obj.score,
     
    CASE
     
    WHEN @rowtotal = obj.score THEN
     
    @rownum
     
    WHEN @rowtotal := obj.score THEN
     
    @rownum :=@rownum + 1
     
    WHEN @rowtotal = 0 THEN
     
    @rownum :=@rownum + 1
     
    END AS rownum
     
    FROM
     
    (
     
    SELECT
     
    uid,
     
    score
     
    FROM
     
    testsort
     
    ORDER BY
     
    score DESC
     
    ) AS obj,
     
    (SELECT @rownum := 0 ,@rowtotal := NULL) r) AS total WHERE total.uid = 222;

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Mysql排序获取排名的实例代码
    • MySQL页面访问统计及排名情况
    • MySQL中给自定义的字段查询结果添加排名的方法
    • mysql分组取每组前几条记录(排名) 附group by与order by的研究
    • 总结几种MySQL中常见的排名问题
    上一篇:mysql如何利用binlog进行数据恢复详解
    下一篇:Windows下MySQL安装教程图文详解
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信