Leetcode 550游戏分析IV我的Windows功能解决方案停留在最后一步

问题描述

我正在尝试解决Leetcode数据库问题#550-游戏分析IV。 在URL下面提供该问题,任何人都无需登录leetcode即可访问:

https://code.dennyzhang.com/game-play-analysis-iv

我试图使用Windows函数解决该问题,该函数不同于上述链接解决方案中给出的方法

我在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

我的查询正确地给了我满足要求的球员人数。 但是,在将结果表示为出席的独立参与者总数的一部分时,我面临着挑战。

任何指导都会有很大帮助。

谢谢!

解决方法

您可以使用公用表表达式从查询中获取输出并使用它来计算分数,如下所示:

;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