环境 xp+9i
有一个销售表(业务员,产品,销售额)
003 c 86
002 c 76
004 c 67
005 c 76
006 c 55
001 d 95
002 d 88
004 d 82
003 d 99
要得到按产品分组得到销售额前三名的业务员如
产品 第一 第二 第三
c 003 86 002 76,005 76 004 67
这个第二 有2个(也有可能是多个)
这个sql怎么写
create table test(seller varchar2(5),product varchar2(5),amt number)
insert into test values (003,'c',86);
insert into test values (002,'c',76);
insert into test values (004,'c',67);
insert into test values (005,'c',76);
insert into test values (006,'c',55);
insert into test values (001,'d',95);
insert into test values (002,'d',88);
insert into test values (004,'d',82);
insert into test values (003,'d',99);
select
product ,max(substr(sys_connect_by_path(seller||':'||amt,','),2)) keep
(dense_rank last order by decode(rn,1,level,-1)) first,
max(substr(sys_connect_by_path(seller||':'||amt,','),2)) keep
(dense_rank last order by decode(rn,2,level,-1)) sec,
max(substr(sys_connect_by_path(seller||':'||amt,','),2)) keep
(dense_rank last order by decode(rn,3,level,-1)) third
from
(select a.*,dense_rank() over (partition by product order by amt desc ) rn,
row_Number() over (partition by product order by amt desc ) num
from test a ) a
connect by product=prior product
and rn= prior rn
and num=prior num+1
group by product
product first sec third
c 3:86 2:76,5:76 4:67
d 3:99 1:95 2:88
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15081535/viewspace-448745/
,如需转载,请注明出处,否则将追究法律责任。