当前位置:首页 > Oracle > 正文内容

如何实现Oracle先组内排序然后再组外排序

flowstone3年前 (2022-04-29)Oracle940

问题描述

工作中遇到一个问题,因为我本人的SQL技术太差了,写了好久,都没有处理好,大概的需求如下,有一个列表,根据一个字段排序,排序后的结果,再根据字段排序。

问题分析

为了让读者能够充分理解这个问题,先分解问题
原始数据如下:


序号名称部门入职时间等级
1小明开发部2012-101
2小丽账务部2013-011
3小华开发部2021-013
4小红开发部2001-012
5小张账务部2022-012

1、先根据部门分组,然后根据等级排序(正序)
预期结果如下

序号名称部门入职时间等级
1小明开发部2012-101
2小红开发部2001-012
3小华开发部2021-013
4小丽账务部2013-011
5小张账务部2022-012

2、先根据部门分组,然后根据入职排序(倒序)
预期结果如下

序号名称部门入职时间等级
1小丽账务部2013-011
2小张账务部2022-012
3小明开发部2012-101
4小红开发部2001-012
5小华开发部2021-013

解决步骤

指定字段分组,组内排序和组外排序

select
	T1.*
from
	(
	select
		ID,
		DEPARTMENT,
		CREATE_TM,
		level,
		row_number() over (partition by DEPARTMENT
	order by
		level desc) as NUM
	from
		USER_INFO
	where
		DEPARTMENT is not null) T1
left join (
	select
		ROWNUM SEQ,
		DEPARTMENT
	from
		(
		select
			DEPARTMENT,
			MAX(CREATE_TM)
		from
			USER_INFO
		group by
			DEPARTMENT
		order by
			MAX(CREATE_TM))) T2 on
	T1.DEPARTMENT = T2.DEPARTMENT
order by
	T2.SEQ desc,
	T1.LEVEL asc;

说明,T1表是根据DEPARTMENT分组并按照level组内排序(正序),T2表是根据DEPARTMENT分组并按照创建时间组外排序(倒序)


扫描二维码推送至手机访问。

版权声明:本文由薛尧的博客发布,如需转载请注明出处。

本文链接:https://flowstone.sourceforge.io/?id=66

分享给朋友:
返回列表

没有更早的文章了...

没有最新的文章了...

相关文章