技术帮
 

row_number() over

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

1472955908895017376.png说两句


row_number函数是对查询结果进行排序的函数,使用该函数后,将每一行增加一个序号,该序号将顺序递增,并且不会重复。

row_number函数常用于分组后显示每组的前几条记录。


1473164453369029402.png 准备基础数据

该表定义了员工的销售业绩。

empid是员工编号;

deptid是部门编号;

salary是员工薪水;

drop table employee;
create table employee (empid int ,deptid int ,salary decimal(10,2));

insert into employee values(1,10,5500.00);
insert into employee values(2,10,4500.00);
insert into employee values(3,20,1900.00);
insert into employee values(4,20,4800.00);
insert into employee values(5,40,6500.00);
insert into employee values(6,40,14500.00);
insert into employee values(7,40,44500.00);
insert into employee values(8,50,6500.00);
insert into employee values(9,50,7500.00);
insert into employee values(10,50,7500.00);
insert into employee values(11,50,9500.00);
insert into employee values(12,40,14500.00);


1473058358717068189.png 查看员工薪水的排名,并按照员工编号排序

select emp.*,row_number() over(order by salary desc) pm from employee emp order by empid desc;

blob.png

1473048237560058428.png 可以看到已经按照薪水的高低生成了pm列,而显示顺序是按照empid排序的


 查看员工薪水的排名,并按照薪水高低排序

select emp.*,row_number() over(order by salary desc) pm from employee emp order by salary desc;

blob.png

1473048237560058428.png 可以看到按照薪酬高低生成pm列,并且当有相同薪酬的时候pm值也不相同。

    譬如 记录5和记录6 记录7和记录8.


 查看每个部门内员工薪水的排名

select emp.*,row_number() over(partition by deptid order by salary desc) pm from employee emp order by deptid desc

blob.png

1473048237560058428.png 可以看到,得出了每个部门内的员工薪水排行