搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Python面面看 > MySQL 实现排名

MySQL 实现排名

Python面面看 2020-05-24

由于 mysql5.7 版本及部分公司数据库是不支持开窗函数的,但是排名问题又是工作中经常会面对的需求,因此我们可以借助 sql 中的变量来实现这一排名功能。以下为变量的基本说明:


说明:

  1. 定义变量:在 sql 语句中,通常会使用@开头来定义一个局部变量。如:@rank

  2. @rank := @rank + 1 :其中 := 是赋值的作用,这句话的意思是先执行 @rank + 1,然后把值赋给@rank,从而实现排名功能;

  3. 赋值:(SELECT @rank := 0) r :使用select将0作为rank字段的初始值,方便后续排序从 1 开始;

  4. 使用case when then end 进行多条件判断。 

CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 END as col_name

在数据库中创建表:

#创建表CREATE TABLE `sql_test` (`id` int(11) NOT NULL AUTO_INCREMENT,`uid` int(11) NOT NULL,`score` tinyint(3) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;


在表中插入数据:

#插入数据INSERT INTO sql_test (uid, score)VALUES(100, 85),(101, 82),(102, 75),(103, 60),(104, 80),(105, 85),(106, 70),(107, 90),(108, 60)

对学生的 score 进行降序排列(不并列查询),先查询,再排序:

select s.uid, s.score, @rank :=@rank+1 as score_rankfrom sql_test as s, (select @rank :=0) rorder by s.score desc;

 

如果学生成绩相同,排名相同(并列查询):

select s.uid, s.score, case when @rank =s.score then @score_rank when @rank :=s.score then @score_rank :=@score_rank+1 end as s_rankfrom sql_test as s, (select @rank :=0,@score_rank:=0) rorder by s.score desc;

MySQL 实现排名




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《MySQL 实现排名》的版权归原作者「Python面面看」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Python面面看微信公众号

Python面面看微信公众号:gh_cb58a6829095

Python面面看

手机扫描上方二维码即可关注Python面面看微信公众号

Python面面看最新文章

精品公众号随机推荐

下一篇 >>

MySQL基础(一)