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 使得数据按必定顺序排序函数
二、MySQL5.7版本spa
例如:计算销售人员的销售额,结果按从高到低排序,查询结果中要包含销售的排名排序
SET @rank := 0;
SELECT
A.*,
@rank := @rank + 1 AS rank
FROM
( SELECT sales_name, sum( sales ) FROM spm_orderci
GROUP BY sales_name it
ORDER BY sum( sales ) DESC ) Aio
例:计算销售人员在不一样城市的销售额;数据
要求:结果根据销售人员在不一样城市的销售额进行分组排序(降序),而且查询结果要包含分组排名查询
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 co
GROUP BY sales_name, city background
ORDER BY sales_name, sum( sales ) DESC ) a;