前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql实现分组排序和不分组排序

mysql实现分组排序和不分组排序

作者头像
数据分析与统计学之美
发布2021-11-25 09:42:56
3.5K0
发布2021-11-25 09:42:56
举报
文章被收录于专栏:Python+数据分析+可视化

大前提

一、不分组排序

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

代码语言:javascript
复制
-- 方法一
select m.*,@r :=@r + 1 as rank
from mian62 m,(select @r := 0) r
order by score desc;
-- 方法二
set @r=0;
select m.*,@r :=@r + 1 as rank
from mian62 m
order by score desc;

效果如下:

2、并列排名:相同的值是相同的排名(但是不留空位)。

代码语言:javascript
复制
-- 方法一
select c.sid,c.name,c.score,c.rank
from
(
	select m.*,
	@c:=if(@p=score,@c,@r) as rank,
	@p:=score,
	@r:=@r+1
	from mian62 m,(select @p:=0,@r:=1,@c:=0)r
	order by score desc
)c
-- 方法二
set @p=0;
set @r=1;
set @c=0;
select c.sid,c.name,c.score,c.rank
from
(
	select m.*,
	@c:=if(@p=score,@c,@r) as rank,
	@p:=score,
	@r:=@r+1
	from mian62 m
	order by score desc
)c

效果如下:

2、并列排名:相同的值是相同的排名(但是留空位)。

代码语言:javascript
复制
-- 方法一
select c.sid,c.name,c.score,c.rank
from
(
	select m.*,
	@c:=if(@p=score,@c,@r) as rank,
	@p:=score,
	@r:=@r+1
	from mian62 m,(select @p:=0,@r:=1,@c:=0)r
	order by score desc
)c
-- 方法二
set @p=0;
set @r=1;
set @c=0;
select c.sid,c.name,c.score,c.rank
from
(
	select m.*,
	@c:=if(@p=score,@c,@r) as rank,
	@p:=score,
	@r:=@r+1
	from mian62 m
	order by score desc
)c

效果如下:

二、分组后排序

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

代码语言:javascript
复制
select a.sid,a.name,a.subject,a.score,a.rank
from  
(
	select m.*,
	if(@p=subject,@r:=@r+1,@r:=1) as rank,
	@p:=subject
	from mian62 m,(select @p:=0,@r:=0)r
	order by subject,score desc
)a;

效果如下:

2、分组后并列排名:组内相同数值排名相同。

代码语言:javascript
复制
-- 为了体现效果,修改其中一条数据;
update mian62 set score=58 where name="张三" and subject="化学";
-- 本题实现代码如下:
select a.sid,a.name,a.subject,a.score,a.rank
from 
(
	select *,
	if(@p=subject,
	case 
	when @s=score then @r
	when @s:=score then @r:=@r+1
	end,
	@r:=1 ) as rank,
	@p:=subject,
	@s:=score
	from mian62 m,(select @p:=0,@s:=0,@r:=0)r
	order by subject,score
)a;

效果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大前提
  • 一、不分组排序
    • 1、普通排名:从1开始,按照顺序一次往下排(相同的值也是不同的排名)。
      • 2、并列排名:相同的值是相同的排名(但是不留空位)。
        • 2、并列排名:相同的值是相同的排名(但是留空位)。
        • 二、分组后排序
          • 1、分组普通排名:从1开始,按照顺序一次往下排(相同的值也是不同的排名)。
            • 2、分组后并列排名:组内相同数值排名相同。
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档