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

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

表 A

oracle 完成排序,去重和分页(limit,group by)_第1张图片

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

oracle 完成排序,去重和分页(limit,group by)_第2张图片

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

oracle 完成排序,去重和分页(limit,group by)_第3张图片

 实际上是根据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是不能直接用>,否则查不出结果。

你可能感兴趣的:(oracle,limit,order,by,distinct,group,by)