【问题标题】:Leetcode 550 Game Play Analysis IV My solution with windows function is stuck at the last stepLeetcode 550 游戏玩法分析四 我的windows功能解决方案卡在最后一步
【发布时间】:2020-11-30 09:26:00
【问题描述】:

我正在尝试解决这个 Leetcode 数据库问题 #550 - Game Play Analysis 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

我的查询正确地给出了满足要求的玩家人数。 但是,在将结果表示为在场不同玩家总数的一小部分时,我面临着挑战。

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

提前致谢!

【问题讨论】:

    标签: sql postgresql window-functions


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2014-12-12
      • 2020-08-12
      相关资源
      最近更新 更多