分组排序函数——row_number()
1、mysql8.0以上版本
用法1:无分组排序
row_number() over(order by 字段 desc)
例如:row_number() over(order by 学生成绩 desc)
表示不分班级,所有学生的成绩从高到低排序
用法2:分组排序
row_number() over(partition by 字段1 order by 字段2 desc)
表示根据字段1分组,在分组内部根据字段2排序,这个函数计算的值就表示每组内部排序后的顺序编号
例如:row_number() over(partition by 班级 order by 学生成绩 desc)
表示根据“班级”分组,在每个“班级”内部根据“学生成绩”排序,这个函数计算的值就表示每组内部排序后的
顺序编号
解释:
row_number( ) 起到了编号的功能
partition by 将相同数据进行分区
order by 使得数据按一定顺序排序
2、mysql5.7版本
用法1:无分组排序
例如:计算销售人员的销售额,结果按从高到低排序,查询结果中要包含销售的排名
set @rank := 0;
select
a.*,
@rank := @rank + 1 as rank
from
( select sales_name, sum( sales ) from spm_order
group by sales_name
order by sum( sales ) desc ) a
用法2:分组排序
例:计算销售人员在不同城市的销售额;
要求:结果根据销售人员在不同城市的销售额进行分组排序(降序),并且查询结果要包含分组排名
set @r := 0,
@type := '';
select
@r :=
case when @type = a.sales_name then
@r + 1 else 1
end as rownum,
@type := a.sales_name as type,
a.*
from
( select sales_name, city, sum( sales ) from spm_order
group by sales_name, city
order by sales_name, sum( sales ) desc ) a;
推荐阅读
-
关于C#中排序函数的总结
-
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
-
PHP二维数组排序的3种方法和自定义函数分享
-
利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法
-
python使用sorted函数对列表进行排序的方法
-
Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
-
sqlServer使用ROW_NUMBER时不排序的解决方法
-
SQL分组排序去重复的小实例
-
Oracle row_number() over()解析函数高效实现分页
-
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结