MySQL窗门函教-序号函数(row_number、rank、dense_rank)
mysql8.0中新增窗口函数(开窗函数)
①聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,有几条记录执行完还是几条。
②聚合函数也可以用于窗口函数。


另外还有开窗聚合函数: SUM,AVG,MIN,MAX
- window_function ( expr ) OVER (
- PARTITION BY ...
- ORDER BY ...
- frame_clause
- )
window_function:是窗口函数名称
expr:有些函数没有参数
PARTITION BY:根据什么分组,类似group by
ORDER BY:根据什么排序
- row_number()|rank()|dense_rank() over (
- partition by ...
- order by ...
- )
- select
- dname,
- ename,
- salary,
- row_number() over(partition by dname order by salary desc) as rn
- from employee;

row_number() :直接排序,将那些数值相同也按照顺序排序
- select
- dname,
- ename,
- salary,
- rank() over(partition by dname order by salary desc) as rn
- from employee;

rank():相同的并列排序,将一样的数值放在了一起,也就是并列排名
- -- 对每个部门的员工按照薪资排序,并给出排名 dense-rank
- select
- dname,
- ename,
- salary,
- dense_rank() over(partition by dname order by salary desc) as rn
- from employee;

dense_rank():连续并列的排序,想并列排名,不想中间空排名次序,即连续的排名
- --求出每个部门薪资排在前三名的员工- 分组求TOPN
- select
- *
- from
- (
- select
- dname,
- ename,
- salary,
- dense_rank() over(partition by dname order by salary desc) as rn
- from employee
- )t
- where t.rn <= 3
