如果数据库中的记录是单位所有员工一年的奖金数,我想列出每个部门,每个员工,以及每个员工在一年中奖金最多的月份和金额,应该怎样写呢?
第一时间想到的是分组,根据部门和人员分组,max(工资)可以很容易拿到这三个参数,但是再拿时间就麻烦了
所以这里使用分区排序来拿
SELECT id,section,u_name,money,m_time,row_number() over (partition by section,u_name ORDER BY money desc) paixu from ceshi WHERE m_time>'2023-01-01';
重点row_number() over (partition by section,u_name ORDER BY money desc)
partition by后跟着的字段是分区字段,同一区再进行排序,与分组不同的是所有数据均有保留,分组后同一组最终只显示一条数据,分区则全部显示。
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
所以想实现效果的话再套一层select筛选下paixu=1的值就好了