我需要对数据进行排序groupwise。据我所知,这不能用sort通过多个条件来实现,而且group也不是我所需要的,因为我不想减少记录,而是在保持组在一起的同时对它们进行排序。请看以下数据:
Group Data1 Data2
a 1 5
a 2 4
a 3 7
a 4 6
b 1 9
b 2 2
b 3 1
b 4 13
c 1 8
c 2 10
c 3 13
c 4 12 我希望组保持在一起,然后按Data2 desc排序,然后按Data1 desc排序。为了保持它们在一起,在任何组的第一条记录之后,在同一组的其余记录之后,以相同的方式排序。想想看,组是按max Data2 desc,max Data1 desc而不是字母顺序排序的。
Group Data1 Data2
b 4 13
b 1 9
b 2 2
b 3 1
c 3 13
c 4 12
c 2 10
c 1 8
a 3 7
a 4 6
a 1 5
a 2 4 我能用SQL实现这一点吗?
在另一个环境中,我可以定义一个计算器,然后简单地按组、Data2、Data1排序。
发布于 2019-01-05 04:25:50
在ORDER BY子句中使用分析函数:
select *
from mytable
order by
max(data2) over (partition by "Group") desc,
max(data1) over (partition by "Group") desc,
"Group",
data2 desc,
data1 desc;发布于 2019-01-05 04:01:48
试试这个:
with a (Group, Data1, Data2 ) as (values
('a', 1, 5)
, ('a', 2, 4)
, ('a', 3, 7)
, ('a', 4, 6)
, ('b', 1, 9)
, ('b', 2, 2)
, ('b', 3, 1)
, ('b', 4, 13)
, ('c', 1, 8)
, ('c', 2, 10)
, ('c', 3, 13)
, ('c', 4, 12)
)
select a.*
from (
select b.*, rownumber() over(order by data2 desc, data1 desc) rn2
from (
select a.*, rownumber() over (partition by group order by data2 desc, data1 desc) rn1
from a
) b
where rn1=1
) b
join a on a.group=b.group
order by b.rn2, a.data2 desc, a.data1 desc;https://stackoverflow.com/questions/54041723
复制相似问题