我有一张表格,其中包含广播电台的数据以及播放的歌曲。播放的所有歌曲都存储在名为' radio_data'的表格中。此表如下所示:
-----------------------------------------------
| id | artist_id | song_id | play_date |
| 1 230 420 2017-5-12 12:00 |
| 2 212 971 2017-5-12 12:01 |
| 3 230 420 2017-5-12 13:00 |
| 4 230 420 2017-5-12 15:00 |
| 5 212 971 2017-5-12 15:02 |
-----------------------------------------------
我有一个页面,其中显示了一首特定歌曲的某些统计信息。在这个页面上,我想根据它的播放次数显示歌曲的等级。
让我们说如果我是song_id 420的页面,它将在2首歌中排名第1。 我不知道从哪里开始。我有这个查询来分组歌曲:
SELECT COUNT(`id`) AS `playcount`, `artist_id`, `song_id` FROM `radio_data` GROUP BY `song_id` ORDER BY `playcount` DESC
这给了我以下结果:
-----------------------------------
| playcount | artist_id | song_id |
| 3 230 420 |
| 2 212 971 |
-----------------------------------
提前感谢您的帮助!
答案 0 :(得分:1)
您可以使用用户变量来显示排名:
set @rn := 0;
select @rn := @rn + 1 as rank,
song_id,
artist_id,
count(*) as times_played
from your_table
group by song_id, artist_id
order by times_played desc;
如果你想获得最高分,比如说10首歌曲,你最后可以添加limit 10
。
答案 1 :(得分:0)
SELECT
song_id, count(id) played_times, @rank := @rank +1 rank
FROM
(
songs_plays CROSS JOIN (SELECT @rank := 0)rank
)
GROUP BY song_id
ORDER BY played_times DESC
结果是
+------------+--------------+--------+
| song_id | played_times | rank |
+------------+--------------+--------+
| 420 | 3 | 1 |
| 971 | 2 | 2 |
+------------+--------------+--------+
在SQL小提琴(http://sqlfiddle.com/#!9/1c48d8/5)
上直播