我正在尝试解决这个Leetcode数据库问题#550 -游戏分析IV。给出问题的url,任何人都可以访问,而不必登录到leetcode:
https://code.dennyzhang.com/game-play-analysis-iv
我尝试使用窗口函数来解决这个问题,这与上面链接的解决方案中给出的方法不同。
我在PostgreSQL中的查询:
select count(distinct player_id) from
(select player_id,
lag(event_date,1) over (partition by player_id order by event_date) as prev,
event_date,
lead(event_date,1) over (partition by player_id order by event_date) as next
from activity) t
where t.event_date - t.prev = 1 or t.next - t.event_date = 1
我的查询正确地给出了满足要求的玩家数量。然而,我面临着将结果表示为在场不同玩家总数的一小部分的挑战。
任何指导都会有很大帮助。
提前感谢!
发布于 2021-06-16 02:59:21
您可以使用公用表表达式来获取查询的输出,并使用它来计算分数,如下所示:
;with cte as (
select count(distinct player_id) as cnt
from
( select player_id,
lag(event_date,1) over (partition by player_id order by event_date) as prev,
event_date,
lead(event_date,1) over (partition by player_id order by event_date) as next
from activity
) t
where t.event_date - t.prev = 1 or t.next - t.event_date = 1
)
select round(cte.cnt/count( distinct activity.player_id),2) as "fraction"
from activity, cte
https://stackoverflow.com/questions/63345873
复制相似问题