差点自闭,个人认为这样子用一个with as可以避免嵌套过多,增加可读性, 第一步是先对各个指标拆解并且附加权重,第二步是计算热度值并且排序等等。 注意的点在于表格中的日期都带有时秒分,所以用date()处理去掉时秒分,不然结果就会是错误的。 with a as( select u.video_id, 100*avg( if(timestampdiff(second, start_time, end_time)>=duration, 1, 0) ) as comp_val, 5*Sum(if_like) as l_val, ...