Mysql教程分组排名实现示例详解
作者:数据分析与统计学之美 发布时间:2024-01-18 14:19:49
标签: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;
结果如下:
上述代码的执行原理如下图:
来源:https://huang-tong-xue.blog.csdn.net/article/details/106728135


猜你喜欢
- 环境:win10+phpstorm2022+phpstudy8+lnmp1、phpinfo(); 查看是否安装xdebug,没有
- 学了python后,之前一些我们常用的方法,也可以换一种思路用python中的知识来解决。相信操作出来后,能收获一大批小粉丝们。就像我们没学
- 如何处理DataFrame的inf值在用DataFrame计算变化率时,例如(今天-昨天) / 昨天恰好为(2-0) / 0时,这些结果数据
- 前言numpy支持对矩阵和数组进行运算,因此很多numpy的很多运算都需要指定操作的维数参数axis(当然这些axis都有带默认值的),本博
- 今天做visual transformer研究的时候,发现了einops这么个神兵利器,决定大肆安利一波。先看链接:https://gith
- 1. 绝对路径引入Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:impor
- CNN中最重要的就是参数了,包括W,b。 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值。参数的初始化也同样重要,因此微
- 一、利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码:$urlToEnco
- 一、property() 函数讲解了解 @property 装饰器之前,我们首先要了解内置函数的 property()。class prop
- 采集文章给建站带来了很大的方便,特别是一些小网站,人员有限,资金有限,适当的使用采集功能可以很快丰富我们的网站,采集这么厉害可能你会觉的代码
- 出错信息为: sys.servers 中找不到服务器 'BBB'。请验证指定的服务器名称是否正确。如果需要,请执行存储过程
- 本文介绍一下 Pytorch 中常用乘法的 TensorRT 实现。pytorch 用于训练,TensorRT 用于推理是很多 AI 应用开
- 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流!为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服
- 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操作ORM
- 一、张量定义张量:TensorFlow的张量是n维数组,类型为tf.Tensor。标量:一个数字 (0阶张量)向量:一维数组 (1阶张量)矩
- 前面给大家分享了pandas.merge用法详解,这节分享pandas数据合并处理的姊妹篇,pandas.concat用法详解,参考利用Py
- python命名规则命名风格python几种不同命名风格驼峰式命名法(WjW)混合式命名法(wjWj)大写(WJWJWJ)或大写加下划线(W
- Gzip是什么复制大神们的解释吧:GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们
- 之前介绍过通过cookie 绕过验证码实现登录的方法。这里并不多余,会增加分析和另外一种方法实现登录。1、思路介绍 1.1、直接看
- ScrapyScrapy是纯python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。Scrapy使用了Twisted异步网络