题解 | 被重复观看次数最多的3个视频

被重复观看次数最多的3个视频

https://www.nowcoder.com/practice/b75fa2412659422c96369976ee1f9504

 with view_count as(
    select cid,uid,
    count(*) as per_view
    from play_record_tb
    group by cid,uid
 ), 
 filter_view_count as(
    select cid,
    sum(per_view) pv
    from view_count
    where per_view > 1
    group by cid
 ),
 ranked_list as(
    select cid,pv,row_number()over(order by pv desc, release_date desc) rk
    from filter_view_count join course_info_tb using(cid)
 )
 select *
 from ranked_list
 where rk <= 3
 order by rk
  1. 窗口函数不会减少行数:窗口函数(COUNT(*) OVER (PARTITION BY cid, uid))会为每一行计算一个值,但不会减少数据行数。例如,如果用户 1001 观看了课程 9001 两次,窗口函数会为这两行分别计算 2,而不是将这两行合并为一行。
  2. 后续步骤无法正确统计:在 filter_view_count 中对 per_view 求和,但由于窗口函数没有减少行数,会导致重复计算。例如,用户 1001 观看了课程 9001 两次,窗口函数会为这两行分别计算 2,然后在 filter_view_count 中求和时,会得到 4,而不是正确的 2。
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务