Amazon Redshift 排名组
Amazon Redshift rank group
我正在尝试在 1 号 10 上进行排名,然后将剩余的以 1000 为一组进行分组(基于数量)
下面是想要的结果,最简单的方法是什么?
想要的结果
我可以使用以下方法一直降低音量排名,但我想对排名超过 10 的任何东西进行分组
DENSE_RANK() over (PARTITION BY date ORDER BY count (DISTINCT volume_key) DESC)as rnk_loc_Vol
您可以先尝试使用常规函数进行排名(原始排名),然后获取每行旁边的第十条记录的数量并生成另一列(最终排名),即 1 到 10 或 11+ 之间的增量的整数除法第十条记录量和行的量乘以 1000。
with
ranked_entries as (
select *
,dense_rank() over (partition by date order by volume desc) as raw_rnk
from tbl
)
,tenth_entry as (
select *
,min(case when raw_rnk<11 then volume end) over (partition by date) as tenth_record_volume
from tbl
)
select *
,case
when raw_rnk<11 then raw_rnk
else 11+(tenth_record_volume-volume)/1000
end as final_rnk
from tenth_entry
(虽然还没有测试)
我正在尝试在 1 号 10 上进行排名,然后将剩余的以 1000 为一组进行分组(基于数量)
下面是想要的结果,最简单的方法是什么?
想要的结果
我可以使用以下方法一直降低音量排名,但我想对排名超过 10 的任何东西进行分组
DENSE_RANK() over (PARTITION BY date ORDER BY count (DISTINCT volume_key) DESC)as rnk_loc_Vol
您可以先尝试使用常规函数进行排名(原始排名),然后获取每行旁边的第十条记录的数量并生成另一列(最终排名),即 1 到 10 或 11+ 之间的增量的整数除法第十条记录量和行的量乘以 1000。
with
ranked_entries as (
select *
,dense_rank() over (partition by date order by volume desc) as raw_rnk
from tbl
)
,tenth_entry as (
select *
,min(case when raw_rnk<11 then volume end) over (partition by date) as tenth_record_volume
from tbl
)
select *
,case
when raw_rnk<11 then raw_rnk
else 11+(tenth_record_volume-volume)/1000
end as final_rnk
from tenth_entry
(虽然还没有测试)