sql开窗函数_排名开窗函数rank 第⼀部分:语法
rank()over(partition by order by )
其中:
  1.column表⽰字段名
  2.partition by 关键字表⽰根据后⾯的字段进⾏分区。
  3.order by 关键字表⽰在partition by约定的分区下定义排名⽅式。
第⼆部分:实例
以下语句在以下环境均可以执⾏:sqlserver2014、oracle19c、mysql8.0.23。
⼯作中经常会遇到需要按多个字段组合进⾏排名的情况,sql提供了rank开窗函数很好的⽀持了该场景。
⽐如有以下⽰例数据
⽰例数据sql
CREATE TABLE t_rank
(
company varchar(10),
department varchar(10),
staff varchar(10),
salary decimal(10,2)
)
insert into t_rank values ('阿⾥巴巴','⼈事部','员⼯A1','5000');
insert into t_rank values ('阿⾥巴巴','⼈事部','员⼯B1','10000');
insert into t_rank values ('阿⾥巴巴','⼈事部','员⼯C1','11000');
insert into t_rank values ('阿⾥巴巴','⼈事部','员⼯D1','21000');
insert into t_rank values ('阿⾥巴巴','财务部','员⼯A2','5000');
insert into t_rank values ('阿⾥巴巴','财务部','员⼯B2','10000');
insert into t_rank values ('阿⾥巴巴','财务部','员⼯C2','11000');
insert into t_rank values ('阿⾥巴巴','财务部','员⼯D2','21000');
insert into t_rank values ('腾讯','⼈事部','员⼯A3','5000');
insert into t_rank values ('腾讯','⼈事部','员⼯B3','10000');
insert into t_rank values ('腾讯','⼈事部','员⼯C3','11000');
insert into t_rank values ('腾讯','⼈事部','员⼯D3','21000');
insert into t_rank values ('腾讯','财务部','员⼯A4','5000');
insert into t_rank values ('腾讯','财务部','员⼯B4','10000');
insert into t_rank values ('腾讯','财务部','员⼯C4','11000');
insert into t_rank values ('腾讯','财务部','员⼯D4','21000');
⽐如我们想知道公司每个部门薪资最⾼的员⼯,那么就可以⽤到rank开窗函数
查询sql如下
select
company,
department,
staff,
salary
from
(
select
company,rank函数怎么排名
department,
staff,
salary,
rank()over(partition by company,department order by salary desc) as rk
from t_rank
)
t
where rk =1
查询结果如下