SQL 排序函数 分组后统计每个分组中最新或最高的纪录

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

猜你喜欢

转载自blog.csdn.net/qq_43632987/article/details/128469200
今日推荐