PARTITION BY 应用场景
表:employee 字段:deptid 部门 salary 工资
-
现在要统计各部门工资高低名次,首先是根据部门分组,再就是以部门为单位排列名次。要达到效果如下:
若是没有排名我们用简单排序就可查询出。但要实现图中排名就要用到PARTITION BY
语法:SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee
-
统计场景:要统计出当天公司考勤情况表,要求查出所有人员最早签到,最晚签退。需达到效果如图:
原理同上面语法一样。需要注意的是把查出的结果集当新结果集最外层用条序号小于2.