-- 步骤1:筛选出每个用户对同一视频观看次数>1的记录(计算重复观看的基础数据)
WITH t AS (
    SELECT 
        cid, 
        uid,
        COUNT(*) AS watch_counts  -- 每个用户对某视频的观看次数
    FROM play_record_tb 
    GROUP BY cid, uid
    HAVING COUNT(*) > 1  -- 仅保留观看次数>1的用户-视频组合
), 
-- 步骤2:计算每个视频的重复观看总次数,并按规则排名
t1 AS (
    SELECT 
        t.cid, 
        -- 格式化pv为三位小数(匹配示例输出格式)
        ROUND(SUM(t.watch_counts), 3) AS pv, 
        -- 排名规则:按重复观看次数降序,次数相同则按发布日期降序
        ROW_NUMBER() OVER(
            ORDER BY SUM(t.watch_counts) DESC, c.release_date DESC
        ) AS rk
    FROM t
    -- 关联课程表获取发布日期(用于排名),补充on关键字修正语法
    JOIN course_info_tb c ON t.cid = c.cid 
    GROUP BY t.cid, c.release_date  -- 需包含release_date确保排序正确(因课程表cid唯一,可关联获取)
)  
-- 步骤3:筛选排名前三的视频
SELECT 
    cid, 
    pv, 
    rk 
FROM t1 
WHERE rk <= 3 
ORDER BY rk ASC;  -- 按排名升序输出