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实现排名并查询指定用户排名功能,并列排名功能相关推荐

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

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

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

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

  3. php查排名,PHP实现排名并查询指定用户排名

    php查询排名的实现方法:首先假设一个user表,此时需要根据number客户数量对用户进行排名:然后我们要对user表内的用户进行一个排名,语句为"$sql = "SELECT ...

  4. php 获取排名,PHP实现排名并查询指定用户排名

    PHP实现排名并查询指定用户排名2020-07-07 17:30:21 php查询排名的实现方法:首先假设一个user表,此时需要根据number客户数量对用户进行排名:然后我们要对user表内的用户 ...

  5. mysql 查询指定字段数据_MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...

  6. mysql select 指定列_MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...

  7. mysql 如何做增量备份_mysql 做增量备份

    首先在这里我要感谢我的同事 @mamiya_c3 哥的指教...QQQ 最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维 ...

  8. mysql 如何做增量备份_mysql实现增量备份

    有点要注意 如果你误删了表 想通过这个恢复 必须恢复日志里面有创建表的日志 不然的话是无法回复的 ?就是必须是从你开始创建表的时候就已经记录日志了? 恢复到哪个位置 就按照哪个位置来计算 mysql ...

  9. mysql怎么做每天签到_MYSQL实现连续签到功能断签一天从头开始(sql语句)

    1,创建测试表 create table `testsign` ( `userid` int(5) default null, `username` varchar(20) default null, ...

最新文章

  1. 关于介绍编程前景的html文档,HTML编程基础稿件(32页)-原创力文档
  2. 《当程序员的那些狗日日子》(五)工作中,工作外
  3. KeyMob:建立一个稳定的移动广告聚合平台!
  4. cas跨域单点登录原理_CAS实现SSO单点登录原理
  5. 怀旧版大脚插件未能从服务器,魔兽世界怀旧服大脚插件
  6. 官方公布94本预警期刊名单,其中5本高风险
  7. Windows远程桌面(mstsc)不能复制粘贴的解决办法
  8. 车窗上为啥总有一些小黑点?没想到居然藏着大作用!
  9. linux视频在windows播放器,适用于Windows和Linux的免费多媒体播放器SMPlayer 18.6.0发布 - 爱绿豆...
  10. 计算机二级C选择题精华
  11. Xtreme ToolkitPro 编译选项
  12. php数据库find(),db_find()
  13. 为什么都建议学java而不是python-为什么都建议学Java而不是Python?两者有什么区别吗?...
  14. PDO 查询mysql返回字段整型变为String型解决方法
  15. 电容或电感的电压_电容和电感的区别、电压超前电流、电流超前电压,傻傻分不清楚...
  16. 上海公积金贷款买房攻略详细解读
  17. JAVA中台化与常用组件设计
  18. 调用个人微信的API接口实现微信收发消息
  19. 【已解决】Spring容器中找不到ServletWebServerFactory类出现的异常
  20. 使用matlab将nc文件转成tif文件

热门文章

  1. 我是一个硬件工程师,面试官随口问了这些问题 | 收藏
  2. Android应用测试方法总结
  3. 如意验证对接TV 神,马搭建 源码,搭建简单,仅供学习交流
  4. getParentFile()方法的一些使用技巧
  5. ExcelToOracle:批量导入Excel文件到Oracle数据库的自动化工具
  6. uni-app注册 page-head
  7. Java实现蓝桥杯单位转换
  8. Unity Shader入门
  9. 云班课js脚本解除视频不可快进
  10. python中 glob.glob