phi*_*hil 3 postgresql row-number ranking
当连续序列被破坏时,如何创建一个从 1 重新开始的排名?
(点击下面的图片)
下表展示了用户的流程。他的总旅程由 8 个步骤组成,页面指示他在每个步骤中所处的页面。我想创建一个排名,当页面更改时该排名会重置。棘手的部分是让排名(第 6 页,第 1 页)重置为 1,而不是在第 4 页继续。按页面分区是不够的,因为我希望当用户更改回第 1 页并继续时重新启动排名。该表包含我想要实现的结果,我只是不知道如何在 Postgres 中做到这一点。
您可以使用行数差异方法分配一个组,然后用于row_number()分配排名:
select step, page,
row_number() over (partition by page, seqnum - seqnum_p order by step) as ranking
from (select t.*,
row_number() over (order by step) as seqnum,
row_number() over (partition by page order by step) as seqnum_p
from t
) t;
Run Code Online (Sandbox Code Playgroud)
要了解其原理,请查看子查询的结果。您将看到两个 seqnum 值之间的差异如何标识具有相同值的连续行。
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |