如何对数据组进行排序?
Posted
技术标签:
【中文标题】如何对数据组进行排序?【英文标题】:How to rank groups of data? 【发布时间】:2020-09-07 16:57:53 【问题描述】:鉴于以下情况,并负责按每组内的 SUM(体积)对原始数据进行排名:
group_id volume
1 2
1 3
2 5
3 1
3 3
如何获得以下内容?
group_id volume group_volume rank
1 2 5 1
1 3 5 1
2 5 5 2
3 1 4 3
3 3 4 3
我可以轻松获得group_volume
,但我正在努力解决如何打破排名的关系,而不是在单独的子查询中按 + 排名分组并加入。
SELECT *
, SUM(volume) OVER (PARTITION BY group_id) AS grouped_volume
, ... AS rank
FROM groups
【问题讨论】:
【参考方案1】:使用 CTE 和 Dense_rank
WITH CTE1 AS (SELECT group_id, volume,
sum(volume) over(partition by group_id) group_volume
from table1)
SELECT A.*, dense_rank() over( order by group_id, group_volume) rank FROM CTE1 A;
【讨论】:
【参考方案2】:为此使用两级窗口函数:
select g.*,
dense_rank() over (order by group_volume desc, group_id) as rank
from (select g.*,
sum(volume) over (partition by group_id) as group_volume
from groups g
) g;
不需要JOIN
。
【讨论】:
这将给出您使用order by group_id, group_volume
或order by group_volume desc, group_id
的错误结果以上是关于如何对数据组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章