簡體   English   中英

選擇最頻繁的5行,並從另一個表中查詢數據

[英]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表中的titleartist一起加入,以制作廣播電台的音樂排行榜,但到目前為止,運氣不好。

這是預期的結果:

[
    {"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

要使用進行測試的SQLfiddle

只需一個ID即可獲得播放順序,無需加入;

SELECT song_id, COUNT(*) plays
FROM plays p
GROUP BY song_id
ORDER BY plays DESC

另一個SQLfiddle

為了僅獲得前5個結果,可以將LIMIT 5添加到任一查詢中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM