【格式】
格式一:RANK() OVER ( [partition by 分区字段] order by 排序字段 asc/desc)
格式二:DENSE_RANK() OVER ( [partition by 分区字段] order by 排序字段 asc/desc)
【说明】
- rank():表示排序结果不连续;
- dense_rank():表示排序结果连续;
- partition by:表示分区统计,该项为可选项;
- order by:表示按指定字段进行排序。
【创建样例数据】
先创建数据表,建表语句如下:
-- Create table
create table T_PRODUT_SALES
(
product VARCHAR2(20) not null,
area VARCHAR2(20) not null,
sale NUMBER not null
)
tablespace TEST_SPACE
pctfree 10
initrans 1
maxtrans 255;
-- Add comments to the table
comment on table T_PRODUT_SALES
is '产品销量表-演示用';
-- Add comments to the columns
comment on column T_PRODUT_SALES.product
is '产品名称';
comment on column T_PRODUT_SALES.area
is '地区';
comment on column T_PRODUT_SALES.sale
is '销量';
再往表中插入数据,SQL语句如下:
insert into T_PRODUT_SALES (product, area, sale)
values ('产品1', '地区1', 50);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品1', '地区2', 60);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品1', '地区3', 70);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品2', '地区1', 50);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品2', '地区2', 65);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品2', '地区3', 75);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品3', '地区1', 40);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品3', '地区2', 60);
insert into T_PRODUT_SALES (product, area, sale)
values ('产品3', '地区3', 85);
最后查询表中数据,返回结果如下:
【样例展示1】
sql语句如下:
select product,area,sale,rank() over(order by sale desc) as 排名 from T_PRODUT_SALES
返回结果如下图:按销量进行不连续排名。
【样例展示2】
sql语句如下:
select product,area,sale,dense_rank() over(order by sale desc) as 排名 from T_PRODUT_SALES
返回结果如下图:按销量进行连续排名。
【样例展示3】
sql语句如下:
select product,area,sale,rank() over(partition by area order by sale desc) as 排名 from T_PRODUT_SALES
返回结果如下图:按地区分区进行不连续排名。
【样例展示4】
sql语句如下:
select product,area,sale,dense_rank() over(partition by area order by sale desc) as 排名 from T_PRODUT_SALES
返回结果如下图:按地区分区进行连续排名。