道一纹字

种一棵树最好的时间是十年前,其次就是现在。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  7 随笔 :: 0 文章 :: 0 评论 :: 10090 阅读

第一部分:语法

rank()over(partition by column1,column2... order by column3,column4...)

其中:

  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,
       department,
       staff,
       salary,
       rank()over(partition by company,department order by salary desc) as rk 
    from t_rank
    )t
where rk = 1
复制代码

查询结果如下

 

posted on   道一纹字  阅读(635)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示