oracle中Group by和Partition by分组排序的用法
1,Group by用法
group by是我们常用的分组方式
// An highlighted block
select a,b from tmp group by a,b;
注意:在使用group by时,select xx中的xx不能单独出现,必须要在gruop by中出现,要不然plsql就会提示这个语句不是一个分组语句。
2,Partition by用法
1,row_number()顺序排序
// An highlighted block
SELECT * FROM (SELECT t.*,row_number() over(partition by idCard order by endTime desc) num_no from tmp t ) where num_no =1;
通过这种方式,可以用来查询同一个分组的并且按照一定顺序来排列的,可以获取其中第几个顺序。
我经常使用这种方式来处理这个问题:一个人生成了多条数据,但是这几条数据的生成时间不同。
2,rank() (跳跃排序,如果有两个第一级别时,也会将两个第一级都显示出来,然后再显示第三级别)
// An highlighted block
SELECT t.*,rank() over(partition by idCard order by endTime desc) num_no from tmp t ;
3,dense_rank()(连续排序,如果有两个第一级别时,接下来是第二级)
// An highlighted block
SELECT t.*,dense_rank() over(partition by idCard order by endTime desc) num_no from tmp t ;
通过上面的描述,我们不难看出两者之间的根本区别就是:
group by 在进行分组之后不能够进行排序,而partition by可以进行排序。