Oracle_分组排序

CREATE TABLE HW
(DEPID NUMBER,
DEPT VARCHAR2(30),
AMOUNT NUMBER);


INSERT INTO HW VALUES(10,'北京',100);
INSERT INTO HW VALUES(10,'上海',200);
INSERT INTO HW VALUES(10,'南京',300);
INSERT INTO HW VALUES(20,'山东',400);
INSERT INTO HW VALUES(20,'河南',500);
INSERT INTO HW VALUES(20,'河北',600);
INSERT INTO HW VALUES(30,'湖南',700);
INSERT INTO HW VALUES(30,'浙江',800);
INSERT INTO HW VALUES(30,'陕西',900);
commit;


-----查询 按照 DEPID 分组,每个DEPID分组中 AMOUNT 最高的 前 2 名

方法一:使用分析函数查询

select * from (

select t.* ,rank() over(partition by depid order by amount desc) rn from hw t )

where rn <3;


方法二:使用子查询的语句为:

SELECT *
FROM HW tr
WHERE
(SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND AMOUNT>tr.AMOUNT)< 2
ORDER BY DEPID, TR.AMOUNT DESC;


rank、dense_rank、row_number :

1:RANK():跳跃排序,如果有两个第二名,接下来的就是第四名,而不是三名

2:DENSE_RANK():连续排序,如果有两个第二,接下来的仍是三

3:ROW_BUMBER():序号进行递增

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值