题解 | #每个月Top3的周杰伦歌曲#

每个月Top3的周杰伦歌曲

https://www.nowcoder.com/practice/4ab6d198ea8447fe9b6a1cad1f671503

WITH
    counted_songs AS (
        SELECT
            MONTH (play_log.fdate) AS month,
            song_info.song_id AS song_id,
            MIN(song_info.song_name) AS song_name,
            COUNT(1) AS play_pv
        FROM
            play_log
            JOIN user_info ON play_log.user_id = user_info.user_id
            JOIN song_info ON play_log.song_id = song_info.song_id
        WHERE
            YEAR (play_log.fdate) = 2022
            AND user_info.age BETWEEN 18 AND 25
            AND song_info.singer_name = '周杰伦'
        GROUP BY
            MONTH (play_log.fdate),
            song_info.song_id
    ),
    ranked_songs AS (
        SELECT
            *,
            ROW_NUMBER() OVER(
                PARTITION BY
                    month
                ORDER BY
                    play_pv DESC,
                    song_id
            ) AS ranking
        FROM
            counted_songs
    )
SELECT
    month,
    ranking,
    song_name,
    play_pv
FROM
    ranked_songs
WHERE
    ranking BETWEEN 1 AND 3
ORDER BY
    month ASC,
    ranking ASC

似乎只能计数-分组加序号-筛选排序?大神还有更简单的方法吗

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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