![](/img/trans.png)
[英]MySQL, Need to select rows that has the most frequent values in another table
[英]Select the top 5 most frequent rows and query data from another table
假設我的數據庫中有2個表,
第一個:
TABLE "SONGS"
+----+-------+--------+
| id | title | artist |
+----+-------+--------+
| 1 | song1 | blah |
| 2 | song2 | wut? |
| 3 | song3 | random |
+----+-------+--------+
還有一個:
TABLE "PLAYS"
+----+---------+--------+
| id | song_id | time |
+----+---------+--------+
| 1 | 2 | 13:04 |
| 2 | 1 | 13:07 |
| 3 | 1 | 14:30 |
| 4 | 3 | 14:41 |
| 5 | 2 | 14:59 |
| 6 | 1 | 15:32 |
+----+---------+--------+
我試圖讓腳本從表plays
查詢出最頻繁的song_id
,然后將其與songs
表中的title
和artist
一起加入,以制作廣播電台的音樂排行榜,但到目前為止,運氣不好。
這是預期的結果:
[
{"song_id": 1, "title": "song1", "artist": "blah", "plays": 3},
{"song_id": 2, "title": "song2", "artist": "wut?", "plays": 2},
{"song_id": 3, "title": "song3", "artist": "random", "plays": 1}
]
先感謝您。
您可以在表格之間進行常規的JOIN,計算每個ID /藝術家/標題的行數並以此排序;
SELECT s.id, s.title, s.artist, COUNT(*) plays
FROM songs s
JOIN plays p
On s.id = p.song_id
GROUP BY s.id, s.title, s.artist
ORDER BY plays DESC
只需一個ID即可獲得播放順序,無需加入;
SELECT song_id, COUNT(*) plays
FROM plays p
GROUP BY song_id
ORDER BY plays DESC
為了僅獲得前5個結果,可以將LIMIT 5
添加到任一查詢中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.