sql 中的排名序列
Rank sequences in sql
我有一个 table 类似这样的:
User ID creation_time Clicked Rank
2.30417E+13 10:39:03 AM FALSE 1
2.30417E+13 10:40:35 AM TRUE 1
2.30417E+13 10:40:36 AM TRUE 2
2.30417E+13 10:40:50 AM FALSE 1
2.30417E+13 10:41:20 AM TRUE 1
2.30417E+13 10:41:36 AM TRUE 2
2.30417E+13 10:42:41 AM TRUE 3
2.30417E+13 10:42:41 AM TRUE 4
2.30417E+13 10:44:23 AM TRUE 5
2.30417E+13 10:44:34 AM TRUE 6
2.30417E+13 10:44:36 AM TRUE 7
2.30417E+13 10:44:39 AM TRUE 8
2.30417E+13 10:44:44 AM TRUE 9
2.30417E+13 10:44:50 AM TRUE 10
2.30417E+13 10:44:53 AM TRUE 11
2.30417E+13 10:44:56 AM TRUE 12
2.30417E+13 10:45:05 AM TRUE 13
2.30417E+13 10:45:40 AM FALSE 1
2.30417E+13 10:45:41 AM TRUE 1
2.30417E+13 10:46:07 AM TRUE 2
2.30417E+13 10:46:07 AM TRUE 3
2.30417E+13 10:46:08 AM TRUE 4
排名列是我想要对行进行排名的方式。在 table 我有数百个用户,我想根据他完成的 clicks/no 点击次数的顺序对每个用户进行排名。
任何的想法?我试过 rank ,row_number,它们的不同设置.. 想不通。
您需要 row_number()
的分组列。这可以计算为 运行 用户 ID 和 clicked 列的值之和,其中 clicked 为 false。
所以:
select t.*,
row_number() over (partition by userid, clicked, grp order by creation_time) as rank
from (select t.*,
sum(case when clicked = false then 1 else 0 end) over (partition by userid order by creation_time) as grp
from t
) t;
有时,Amazon 需要 windowing 子句用于 window 函数,因此您可能需要 rows between unbounded preceding and current row
。 Postgres 没有这个要求。
我有一个 table 类似这样的:
User ID creation_time Clicked Rank
2.30417E+13 10:39:03 AM FALSE 1
2.30417E+13 10:40:35 AM TRUE 1
2.30417E+13 10:40:36 AM TRUE 2
2.30417E+13 10:40:50 AM FALSE 1
2.30417E+13 10:41:20 AM TRUE 1
2.30417E+13 10:41:36 AM TRUE 2
2.30417E+13 10:42:41 AM TRUE 3
2.30417E+13 10:42:41 AM TRUE 4
2.30417E+13 10:44:23 AM TRUE 5
2.30417E+13 10:44:34 AM TRUE 6
2.30417E+13 10:44:36 AM TRUE 7
2.30417E+13 10:44:39 AM TRUE 8
2.30417E+13 10:44:44 AM TRUE 9
2.30417E+13 10:44:50 AM TRUE 10
2.30417E+13 10:44:53 AM TRUE 11
2.30417E+13 10:44:56 AM TRUE 12
2.30417E+13 10:45:05 AM TRUE 13
2.30417E+13 10:45:40 AM FALSE 1
2.30417E+13 10:45:41 AM TRUE 1
2.30417E+13 10:46:07 AM TRUE 2
2.30417E+13 10:46:07 AM TRUE 3
2.30417E+13 10:46:08 AM TRUE 4
排名列是我想要对行进行排名的方式。在 table 我有数百个用户,我想根据他完成的 clicks/no 点击次数的顺序对每个用户进行排名。 任何的想法?我试过 rank ,row_number,它们的不同设置.. 想不通。
您需要 row_number()
的分组列。这可以计算为 运行 用户 ID 和 clicked 列的值之和,其中 clicked 为 false。
所以:
select t.*,
row_number() over (partition by userid, clicked, grp order by creation_time) as rank
from (select t.*,
sum(case when clicked = false then 1 else 0 end) over (partition by userid order by creation_time) as grp
from t
) t;
有时,Amazon 需要 windowing 子句用于 window 函数,因此您可能需要 rows between unbounded preceding and current row
。 Postgres 没有这个要求。