WITH t AS(
SELECT DISTINCT month,song_name,song_id,COUNT(age) OVER (PARTITION BY month,song_name) AS play_pv
FROM(
SELECT month(a.fdate) AS month,b.age,c.song_name,c.singer_name,a.song_id
FROM play_log AS a
JOIN user_info AS b ON a.user_id = b.user_id
JOIN song_info AS c ON a.song_id = c.song_id
) AS d
WHERE age >= 18 AND age <= 25 AND singer_name = '周杰伦'
)
SELECT *
FROM(
SELECT month,ROW_NUMBER() OVER (PARTITION BY month ORDER BY play_pv DESC,song_id ASC) AS ranking,
song_name,play_pv
FROM t
) AS e
WHERE ranking <= 3
ORDER BY month ASC,ranking ASC
小白写的可以看看

京公网安备 11010502036488号