SELECT sub.cid, ROUND(sub.total_pv, 3) AS pv, sub.rk FROM ( SELECT cid, SUM(user_pv) AS total_pv, ROW_NUMBER() OVER ( ORDER BY SUM(user_pv) DESC, release_date DESC ) AS rk FROM ( SELECT p.cid, uid, COUNT(*) AS user_pv, c.release_date FROM play_record_tb p JOIN course_info_tb c ON p.cid = c.cid GROUP BY p.cid, uid, c.release_date HAVING COUNT(*) > 1 ) AS user_stats GROUP BY cid, release_date ) AS sub WHERE sub.rk <= 3 ORDER BY sub.rk ASC;
自己不会写,学习一下评论区大佬的代码
要一层一层写,不要总想一次写完,多写点子查询表逻辑更清楚
- 按用户课程统计播放次数
- 聚合为课程级别的播放量
- 筛出排名前 3 的课程