题解 | 最受欢迎的top3课程

最受欢迎的top3课程

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

/*
#先计算平均评分、一周内的观看次数、一周内的播放总时长
with tb1 as
(
    select
        p.cid,
        avg(p.score) as avg_score,
        count(case when datediff(date(p.start_time), c.release_date)<=7 then 1 end) as counts,
        sum(case when datediff(date(p.start_time), c.release_date)<=7 then timestampdiff(minute,p.start_time,p.end_time) else 0 end) as sumtime
    from play_record_tb p
    join course_info_tb c on p.cid = c.cid
    group by cid
),
#给它们排序
tb2 as
(
    select 
        cid,
        avg_score,
        counts,
        sumtime,
        rank() over(order by counts desc,sumtime desc) as rk
    from tb1
    where avg_score>=3
)
#最终输出
select
    cid,
    counts as pv,
    sumtime as time_len
from tb2
where rk<=3
order by pv desc,time_len desc;
*/

#走一下官方的解题
select 
    p.cid,
    count(*) as pv,
    sum(timestampdiff(minute,p.start_time,p.end_time)) as time_len
from course_info_tb c
join play_record_tb p on c.cid=p.cid
where timestampdiff(day, c.release_date, date_format(p.start_time, '%Y-%m-%d')) <= 7
group by p.cid
    having avg(p.score) >=3
order by pv desc,time_len desc
limit 3;

笨鸟笨鸟,干不过官方思路,我的代码咋这么长,唉😔

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
12-10 15:21
华为-媒体院 算法 n*16 硕士985
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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