我有一个带有两个表的数据库:歌曲,视频。每首歌都有很多视频。如何获取每首歌曲中观看次数最多的视频?
song : id, songname
video : id, song_id, url, views
结果应为[id(song), songname, url(for the most viewed video)
。
还有一个问题,我怎么知道单个查询中的结果数量?
答案 0 :(得分:0)
select song.id,
song.songname,
video.url
from song,
video
where song.id = video.song_id
and song.id = ?
order by video.views desc
limit 1
我怎么知道单个查询中的结果数量?
因为上面的查询使用" limit",它总是只返回一首歌,即使有几首歌具有相同的观看次数。所以你总是在这个查询中得到一个结果。
答案 1 :(得分:0)
这应该有效。只是不确定是否需要别名子查询。但基本上这个:
SELECT
song.id, song.songname, video.url
FROM song
JOIN video
on song.id = video.song_id
WHERE video.views IN
(SELECT
max(views)
FROM
video
GROUP BY song_id)
如果每部歌曲都有大量视频,此查询可能还需要一段时间。
答案 2 :(得分:0)
SELECT song.id, songname, url
FROM video
INNER JOIN song
ON song.id = song_id
WHERE views = (SELECT MAX(views) FROM video AS v WHERE v.song_id = video.song_id)
GROUP BY song_id, songname, url