【Kay】某音SQL题目

 1.各个视频平均完播率

计算有播放记录的视频的完播率(结果保留三位小数),并按完播率降序排序

SELECT u.video_id,
       ROUND(SUM(IF(TIMESTAMPDIFF(SECOND,start_time,end_time) >= duration,1,0))/COUNT(start_time),3) AS avg_comp_play_rate
FROM tb_user_video_log u
INNER JOIN tb_video_info v
ON u.video_id = v.video_id
GROUP BY u.video_id
ORDER BY avg_comp_play_rate DESC

2.平均播放进度大于60%的视频类别

计算各类视频的平均播放进度,将进度大于60%的类别输出

SELECT tag,
    CONCAT(ROUND(AVG(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>duration,1,
        TIMESTAMPDIFF(SECOND,start_time,end_time)/duration))*100,2) , "%") AS avg_play_progress
FROM tb_user_video_log u
INNER JOIN tb_video_info v
ON u.video_id = v.video_id
GROUP BY tag
HAVING AVG(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>duration,1,
              TIMESTAMPDIFF(SECOND,start_time,end_time)/duration)) > 0.6
ORDER BY avg_play_progress DESC

3.每类视频近一个月的转发量/率

 统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)中,每类视频的转发量和转发率(保留3位小数)

输出试例:

筛选近30天内的代码

WHERE TIMESTAMPDIFF(DAY,date(start_time),date((select max(start_time) from tb_user_video_log))) <= 29

4.每个创作者每月的涨粉率及截止当前的总粉丝量

计算2021年里每个创作者每月的涨粉率及截止当月的总粉丝量 (假设粉丝量从0开始)

select author, month,
round(add_fans/counts,3) fans_growth_rate, 
sum(add_fans) over (partition by author order by month) total_fans
from (
    
    select author, 
     DATE_FORMAT(start_time,'%Y-%m') month, 
     sum(case when if_follow=2 then -1 else if_follow end) add_fans,
     count(start_time) counts
     from tb_user_video_log t1
     join tb_video_info t2 
     on t1.video_id=t2.video_id
     where year(start_time)=2021
     group by author, month) a

ORDER BY author, total_fans

5.国庆期间每类视频点赞量和转发量

 统计2021年国庆头3天每类视频每天的近一周总点赞量和一周内最大单天转发量,结果按视频类别降序、日期升序排序

select tag,dt,like_cnt,retweet_cnt
FROM
(select tag,day0 dt,
    sum(like1) over(partition by tag order by day0  ROWS between 6 preceding and current row) like_cnt,
    max(retweet1) over(partition by tag order by day0  ROWS between 6 preceding and current row) retweet_cnt
from(
    SELECT tag,
        date_format(start_time,'%Y-%m-%d') day0,
        sum(if_like) like1,
        sum(if_retweet) retweet1
    
    FROM tb_user_video_log a
        left join tb_video_info b
        on a.video_id=b.video_id
    
    where year(start_time)=2021
    GROUP BY tag,day0) lchid
group BY tag,day0) child

where dt between '2021-10-01' and '2021-10-03'
group BY tag,dt
order by tag desc,dt 

over  ( order   by   month    rows between 1 preceding and 3 following 

1行前,3行后

over  ( order   by   month    rows between 6 preceding and current row 

6行前,到当前行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值