翼度科技»论坛 编程开发 mysql 查看内容

MySQL开窗函数

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
MySQL开窗函数

知识点
  1. 三种开窗函数:row_number(),rank(),dense_rank() 这三种函数都是用于返回结果集的分组内每行的排名
  2. 区别:
  3.     row_number():特点是唯一且连续,如果四个人是按成绩排名,那么是1234这样排的,即使有重分的人
  4.         rank(): 特点是并列不连续,如果四个人是按成绩排名,那么是1224这样排的,重分的人是同一个排名,且占一个排名的位置,排名不连续
  5.         dense_rank():特点是并列且连续,如果四个人是按成绩排名,那么是1223这样排的,重分的人是同一个排名,共占一个排名,排名连续
复制代码
示例
  1. # 三种排序函数: row_number() rank()  dense_rank()
  2. # 数据准备
  3. create table employee (
  4. empid int,ename varchar(20) ,deptid varchar(10) ,salary decimal(10,2)
  5. );
  6. insert into employee values(1,'刘备','蜀',5500.00);
  7. insert into employee values(2,'赵云','蜀',4500.00);
  8. insert into employee values(3,'张飞','蜀',3500.00);
  9. insert into employee values(4,'关羽','蜀',4500.00);
  10. insert into employee values(5,'曹操','魏',1900.00);
  11. insert into employee values(6,'许褚','魏',4800.00);
  12. insert into employee values(7,'张辽','魏',6500.00);
  13. insert into employee values(8,'徐晃','魏',14500.00);
  14. insert into employee values(9,'孙权','吴',44500.00);
  15. insert into employee values(10,'周瑜','吴',6500.00);
  16. insert into employee values(11,'陆逊','吴',7500.00);
  17. # 需求一: 使用三种排序函数对employee表中员工按照薪资进行降序排名:
  18. select *,row_number() over (order by salary desc) as rank1,rank() over (order by salary desc)as rank2,dense_rank() over (order by salary desc)as rank3 from employee;
  19. # 需求二: 对employee表中按照deptid进行分组,并对每一组的员工按照薪资进行降序排名:
  20. select *,row_number() over (partition by deptid order by salary desc) as rank1,rank() over (partition by deptid order by salary desc)as rank2,dense_rank() over (partition by deptid order by salary desc)as rank3 from employee;
  21. #开窗函数经常用于解决TOP N问题
复制代码
来源:https://www.cnblogs.com/lionet-kk/p/mysql04.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

上一篇: MySQL开窗函数

下一篇: MySQL-简单总结

举报 回复 使用道具