MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码

 更新时间:2018年10月13日 17:07:03   作者:kwin  
这篇文章主要给大家介绍了关于MYSQL实现排名及查询指定用户排名功能(并列排名功能)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧

前言

本文主要介绍了关于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服务器CPU利用率过高排查过程

    mysql服务器CPU利用率过高排查过程

    文章介绍了通过监控平台发现MySQL服务器CPU利用率过高的问题,通过排查和分析,找到一条执行时间过长的SQL语句,并通过EXPLAIN分析和优化该SQL,最终解决了CPU利用率过高的问题
    2025-12-12
  • MySQL数据库的约束限制详解

    MySQL数据库的约束限制详解

    这篇文章主要介绍了MySQL数据库的约束限制详解,数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性、有效性、完整性,下文简单介绍需要的朋友可以参考一下
    2022-08-08
  • MySQL存储引擎的实现要素分析

    MySQL存储引擎的实现要素分析

    这篇文章主要为大家介绍了MySQL存储引擎的实现要素分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • MySQL查看数据库、表和索引的容量大小的方法

    MySQL查看数据库、表和索引的容量大小的方法

    在我们平时工作中,如果一个业务运行很久了,可能会需要我们去看看这块业务产生的数据量有多大,比如这个业务所使用的数据库存储空间都使用了多少个G了,哪一张数据表才是大表,下面整理了一些可以拿来即用的SQL以供小伙伴们参考,需要的朋友可以参考下
    2025-09-09
  • MySQL重置密码终极版(附详细步骤)

    MySQL重置密码终极版(附详细步骤)

    mysql是最常见的关系型数据库管理系统之一,它是开源的,易于使用和管理,对于mysql管理员来说,密码管理是非常重要的,因为数据库可能保存着重要的信息,这篇文章主要介绍了MySQL重置密码终极版的相关资料,需要的朋友可以参考下
    2025-07-07
  • 利用Mysql定时+存储过程创建临时表统计数据的过程

    利用Mysql定时+存储过程创建临时表统计数据的过程

    这篇文章主要介绍了利用Mysql定时+存储过程创建临时表统计数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • MySQL 强制使用特定索引的操作

    MySQL 强制使用特定索引的操作

    MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异,建议优化索引结构而非强制使用,本文介绍MySQL 强制使用特定索引的操作,感兴趣的朋友一起看看吧
    2025-07-07
  • 解读mysql datetime类型精确到毫秒、微秒的问题

    解读mysql datetime类型精确到毫秒、微秒的问题

    这篇文章主要介绍了解读mysql datetime类型精确到毫秒、微秒的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • mysql外键(Foreign Key)介绍和创建外键的方法

    mysql外键(Foreign Key)介绍和创建外键的方法

    这篇文章主要介绍了mysql外键(Foreign Key)命令和添加外键方法,需要的朋友可以参考下
    2014-02-02
  • mysql 使用profiling和explain查询语句性能解析

    mysql 使用profiling和explain查询语句性能解析

    MySQL 查询 Profile 可以告诉你每个查询花费了多长时间,使用了多少资源,执行了哪些操作等,这篇文章主要介绍了mysql 使用profiling和explain查询语句性能解析,需要的朋友可以参考下
    2024-02-02

最新评论