oracle 完成排序,去重和分页(limit,group by)

本文介绍了如何在Oracle中使用distinct关键字去重,针对多列选择和部分字段去重的情况,以及如何通过ROWNUM实现分页查询,特别提到了GROUP BY和聚合函数在去重中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.oracle的去重可以使用distinct关键字,例如有张表如下所示:

表 A

只select单列,可以用distinct对该字段去除: select distinct name from A,结果如下:

如果select多列,用distinct去重的sql为:select distinct name, id from A,结果如下:

 实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持。

如果我select多个字段:name,id但是只想对id去除,怎么实现呢?

select id, distinct name from A;这样的语句语法是会报错的。

正确的姿势应该使用group by进行去重,例如:select id,max(name) as name from A group by id

max可以换成其他的聚合函数,比如min,如果id和name是一一对应的,那么使用什么聚合函数无所谓,如果其他字段和group by的字段是一对多,比如其他字段orderTime(一个用户id对应多个订单时间),那么显示最近时间的订单就要用max(orderTime)。当然,group by后面一般会跟上 order by orderTime desc,意思是按照订单时间倒序。

2.既然前面提到排序,那么一般与分页是分不开的,oracle实现分页查询,相比mysql中的limit等关键字,oracle中对应的是ROWNUM来实现的。

如果我想查询A表中的第5-10条记录,那么语句为:SELECT * FROM (SELECT ID,NAME,ROWNUM r FROM A WHERE ROWNUM <= 10) WHERE r > 5;, 需要注意的是ROWNUM是不能直接用>,否则查不出结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值