在数据处理过程中很多时候会遇到需要针对数据进行分组然后获取每个分组TOP N,那么针对这样的问题应该如何处理呢?下文就使用一个示例进行介绍
知识点
分组聚合,就是先分组再排序,可以的话顺手标个排名;如果不想分组也可以排名;如果不想分组同时再去重排名也可以
ROW_NUMBER() OVER(
[PARTITION BY column_1, column_2,…]
[ORDER BY column_3,column_4,…]
)
背景
假设现在有如下一张表需要统计每个部门薪水最高的员工

如何解决问题
根据上文说明,现在就是需要根据部分进行分组然后再根据薪水进行倒序排列,SQL如下:
select id,dept_id,salary,row_number() over( partition by dept_id order by salary desc ) as rn from test.employee
查询的结果如下:

那么如何获取薪水最高的员工呢?可以使用根据排名进行筛选rn小于2的数据,SQL如下:
MySQL分组后取每组Top N方法解析

本文探讨了在数据处理中如何解决针对数据分组并获取每个分组顶部N条记录的问题。通过一个示例展示了如何使用MySQL进行分组聚合,先分组后排序,并结合排名进行筛选,以统计每个部门薪水最高的员工。
最低0.47元/天 解锁文章
555

被折叠的 条评论
为什么被折叠?



