oracle——数据表的数据查询——oracle高级函数

99封情书 提交于 2020-02-03 23:57:23
sql查询

oracle高级函数

create table yuangong ( id number,
                        name varchar2(50),
                        zhiwei varchar2(50),
                        age number,
                        sex varchar2(20)
                      ) tablespace test
                      
insert into yuangong values(1,'周磊01','操作工',21,'男');
insert into yuangong values(2,'周磊02','操作工',21,'女');
insert into yuangong values(3,'周磊03','操作工',22,'男');
insert into yuangong values(4,'周磊04','操作工',24,'女');
insert into yuangong values(5,'周磊05','操作工',26,'男');
insert into yuangong values(6,'周磊06','操作工',24,'女');
insert into yuangong values(7,'周磊07','操作工',29,'男');
insert into yuangong values(8,'周磊08','操作工',22,'女');
insert into yuangong values(9,'周磊09','操作工',27,'男');
insert into yuangong values(10,'周磊10','操作工',25,'女');

insert into yuangong values(11,'周11磊','头目',34,'男');
insert into yuangong values(12,'周12磊','头目',31,'女');
insert into yuangong values(13,'周13磊','头目',31,'男');
insert into yuangong values(14,'周14磊','头目',34,'女');

insert into yuangong values(15,'周15磊','经理',45,'男');

select * from yuangong;

drop table yuangong;

1、rank()函数用于返回当前记录在窗口函数所指定的记录集中的排名

select name,rank() over( order by age ) position from yuangong;

rank()函数用于返回当前记录在窗口中的排序序号,对于排名相同的记录,函数返回排序相同的排序序号;

当出现多个排名相同的记录时,下一排名序号,将根据前一排名各个数进行跳跃。

2、相对于rank()函数,dense_rank()函数所获得的排名,则不会出现跳跃。

select name,dense_rank() over( order by age ) position from yuangong;

注意:rank()函数和dense_rank()函数对于排名相同的多条记录,返回相同的排名序列号,而函数row_number()函数每条记录都会存在唯一的排名序号

select name,row_number() over( order by age ) position from yuangong;


row_number()函数每次均返回唯一的排序序列号。

------------------------------------------------------------------------------------------------------------

分区窗口

对于窗口函数,利用partition by 关键字可以指定分区窗口

select xinzi.*,dense_rank() over ( partition by zhiwei order by jine ) position from xinzi,yuangong order by yuangong.id;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!