Over()窗口函数最常见的搭配有以下几种:
- rank(),dense_rank(),row_number() + over(partition by … order by …) 排名
- sum(),avg(),count()聚合函数+over(partition by … order by …)
- max(),min()+over(partition by … order by …) 最大值、最小值
- first_value(),last_value() + over(partition by … order by …) 第一条、最后一条记录
- lag(),lead() + over(partition by … order by …) 偏移量
其中的partition by 是分组,order by 是排序。这里的分组与group by 是不同的,最明显的是group by会影响返回结果的条数,但是partition by 不会。
案例用到的建表语句:
create table LX_05_SALARY
(
id NUMBER,
department_name VARCHAR2(100),
sal NUMBER,
pay_date DATE
)
插数语句:
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (1, 'A部门', 80000, to_date('10-01-2020', 'dd-mm-yyyy'));
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (2, 'B部门', 60000, to_date('10-01-2020', 'dd-mm-yyyy'));
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (3, 'C部门', 100000, to_date('10-01-2020', 'dd-mm-yyyy'));
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (4, 'A部门', 70000, to_date('10-12-2019', 'dd-mm-yyyy'));
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (5, 'B部门', 60000, to_date('10-12-2019', 'dd-mm-yyyy'));
insert into lx_05_salary (ID, DEPARTMENT_NAME, SAL, PAY_DATE)
values (6, 'C部门&