Mysql教程分组排名实现示例详解

 更新时间:2021年10月26日 16:48:32   作者:数据分析与统计学之美  
这篇文章主要为大家介绍了Mysql数据库分组排名实现的示例详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

1.数据源

在这里插入图片描述

2.数据整体排名

1)普通排名

从1开始,按照顺序一次往下排(相同的值也是不同的排名)。

set @rank =0;
select 
	city ,
	score, 
	@rank := @rank+1 rank 
from cs 
order by score desc;

结果如下:

在这里插入图片描述

2)并列排名

相同的值是相同的排名(但是不留空位)。

set @rank=0,@price=null;
select cs.* ,
 case when @price = score then @rank 
 when @price := score then @rank := @rank+1 end rank  
 from cs order by score desc;
 -- 当查询的score 值 = @price时,输出@rank,
 -- 当不等时,将score值赋给@price ,并输出@rank := @rank+1
 
-- 或者
set @rank=0,@price=null;
select 
	a.city,a.score,a.rank 
from 
(select cs.*,
	@rank := if(@p=score,@rank,@rank+1) rank,
	@p := score
from cs 
order by score desc) a;

结果如下:

在这里插入图片描述

3)并列排名

相同的值是相同的排名(但是留空位)。

set @rank=0,@price=null, @z=1;
select 
	a.city,a.score,a.rank 
from 
(select 
	cs.*,
	@rank := if(@p=score,@rank,@z) rank,
	@p := score,@z :=@z+1
from cs 
order by score desc) a;

结果如下:

在这里插入图片描述

3.数据分组后组内排名

1)分组普通排名

从1开始,按照顺序一次往下排(相同的值也是不同的排名)。

set @rank=0,@c=null;
select 
	cs.city,cs.score,
	@rank := if(@c = city,@rank+1,1) rank,
	@c := city
from cs 
order by cs.city,cs.score;

结果如下:

在这里插入图片描述

2)分组后并列排名

组内相同数值排名相同,不占空位。

set @rank=0,@c=null,@s=null;
select 
	cs.city,cs.score,
	@rank := if(@c=city,if(@s=score,@rank,@rank+1),1) rank ,
	@c := city,
	@s :=score 
from cs 
order by cs.city,cs.score;

结果如下:

在这里插入图片描述

3)分组后并列排名

组内相同数值排名相同,需要占空位。

set @rank=0,@c=null,@s=null;
select 
	cs.city,cs.score,
	@rank := if(@c=city,if(@s=score,@rank,@rank+1),1) rank ,
	@c := city,
	@s :=score 
from cs 
order by cs.city,cs.score;

结果如下:

在这里插入图片描述

4.分组后取各组的前两名

① 方法一:按照分组排名的三种方式,然后限定排名的值

set @rank=0,@z=0,@c=null,@s=null;
select a.city,a.score,a.rank from 
(select 
	cs.city city,cs.score score,
	@z := if(@c=city,@z+1,1),
	@rank := if(@c=city,if(@s=score,@rank,@z),1) rank,
	@c := city,
	@s :=score 
from cs 
order by cs.city,cs.score desc) a
where a.rank<=2;

结果如下:

在这里插入图片描述

② 内部查询

SELECT * FROM cs c
WHERE (
    SELECT count(*) FROM cs
    WHERE c.city=cs.city AND c.score<cs.score )<2
ORDER BY city,score DESC;

结果如下:

在这里插入图片描述

上述代码的执行原理如下图:

在这里插入图片描述

以上就是Mysql教程分组排名实现示例详解的详细内容,更多关于Mysql分组排名的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL 5.7.20绿色版安装详细图文教程

    MySQL 5.7.20绿色版安装详细图文教程

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。这篇文章主要介绍了MySQL 5.7.20绿色版安装详细图文教程,需要的朋友可以参考下
    2017-11-11
  • MySQL之FIELD()与ORDER BY()相结合实现对结果的自定义排序方式

    MySQL之FIELD()与ORDER BY()相结合实现对结果的自定义排序方式

    这篇文章主要介绍了MySQL之FIELD()与ORDER BY()相结合实现对结果的自定义排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Linux中更改转移mysql数据库目录的步骤

    Linux中更改转移mysql数据库目录的步骤

    前几天发现由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,只能想办法转移数据的目录。网上有很多相关的文章写到转移数据库目录的文章,但转载的过程中还会有一些错误,因为大部分人根本就没测试过,这篇文章是本文测试过整理好后分享给大家。
    2016-11-11
  • MySQL复制架构的搭建及配置过程

    MySQL复制架构的搭建及配置过程

    这篇文章主要介绍了MySQL复制架构的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • MySQL ALTER命令使用详解

    MySQL ALTER命令使用详解

    这篇文章主要为大家详细介绍了MySQL ALTER命令的使用方法,简单实用,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • MySQL数据优化-多层索引

    MySQL数据优化-多层索引

    这篇文章主要介绍了MySQL数据优化 多层索引,文章围绕MySQL数据优化 多层索引的相关资料展开详细的内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • MySQL优化之如何了解SQL的执行频率

    MySQL优化之如何了解SQL的执行频率

    MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息
    2014-05-05
  • MySQL 数据库锁的实现

    MySQL 数据库锁的实现

    本文主要介绍了MySQL 数据库锁的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL如何添加数据insert命令

    MySQL如何添加数据insert命令

    这篇文章主要介绍了MySQL如何添加数据insert命令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 教你如何通过日志文件恢复MySQL数据

    教你如何通过日志文件恢复MySQL数据

    Binlog日志是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日志来恢复数据,这篇文章主要给大家介绍了关于如何通过日志文件恢复MySQL数据的相关资料,需要的朋友可以参考下
    2022-02-02

最新评论