row_number()排序函数 统计每个部门薪资最高的员工信息(同一个部门的员工按照薪资进行降序排序)
第一种写法:row_number() over(partition by 一个或多个分组列 order by 一个或多个排序列 asc/desc) as 别名 //如果不写asc/desc的话,默认为asc
第二种写法:row_number() over(distribute by 一个或多个分组列 sort by 一个或多个排序列 asc/desc) as 别名
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
select *,
row_number() over(distribute by deptid sort by salary desc) rn from employee;
//1.distribute by deptid sort by salary desc:按照部门deptid进行分组,每个分组内按照薪资即salary进行降序排序,即同一个部门的员工按照薪资进行降序排序
//2.分组条件:distribute by deptid 排序条件:sort by salary desc
//3.rn:为别名,代表每个分组中每行数据的所在序号ID,可用于根据rn序号ID直接获取出每个分组中的第一条数据,作用大。
统计结果
empid deptid sex salary rn
1 10 female 5500.0 1
2 10 male 4500.0 2
4 20 male 4800.0 1
3 20 female 1900.0 2
7 40 male 44500.0 1
6 40 female 14500.0 2
5 40 female 6500.0 3
9 50 male 7500.0 1
8 50 male 6500.0 2
5.直接取出rn的编号为1的记录,就是每个部门薪资最高的员工信息(获取出每个分组中薪资最高的员工信息,where条件为rn=1)
select *
from (select *,
row_number() over(distribute by deptid sort by salary desc) rn from employee) t where t.rn=1;
//1.distribute by deptid sort by salary desc:按照部门deptid进行分组,每个分组内按照薪资即salary进行降序排序,即同一个部门的员工按照薪资进行降序排序
//2.分组条件:distribute by deptid 排序条件:sort by salary desc
//3.rn:为别名,代表每个分组中序号ID。
// t.rn=1:表示取每个分组中序号ID为1的数据
统计结果
empid deptid sex salary rn
1 10 female 5500.0 1
4 20 male 4800.0 1
7 40 male 44500.0 1
9 50 male 7500.0 1
SQL 排序函数 分组后统计每个分组中最新或最高的纪录
最新推荐文章于 2024-06-30 21:16:43 发布