问题描述
我正在尝试解决Leetcode数据库问题#550-游戏分析IV。 在URL下面提供该问题,任何人都无需登录leetcode即可访问:
https://code.dennyzhang.com/game-play-analysis-iv
我试图使用Windows函数解决该问题,该函数不同于上述链接的解决方案中给出的方法。
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