我正在尝试使用两个表格,视频和评分为网站制作简单的视频费率系统。基本上,“视频”表上有一个视频记录,然后在“评级”表中的视频ID有1或n个等级。我可以选择单个视频记录,并根据该视频的所有评分的平均值添加一列:
SELECT v.*, avg(r.rate) FROM videos v
LEFT JOIN ratings r
ON v.id = r.video_id
WHERE v.id = 100;
返回:
id | name | file | rate
------------------------------------------
100 | Testvideo | test.avi | 4.4286
“评级”中的该ID有7行,范围从整数3到5,所以平均值按预期工作,如果特定视频没有评级,它会为费率列抛出null但是一切否则出现。所以,我有覆盖单个ID的方法,但如果我想以相同的格式返回整个视频列表,我无法弄清楚查询是什么
id | name | file | rate
------------------------------------------
1 | test1 | test1.avi | 5
2 | super2 | conan.avi | null
3 | mega3 | wedding.avi | 2.1149
我尝试了很多东西,但他们都返回了一行(我假设是因为avg函数)或重复的行。
感谢。
答案 0 :(得分:0)
使用相关子查询:
SELECT v.*,
(SELECT avg(r.rate)
FROM ratings r
WHERE v.id = r.video_id
) as avgrating
FROM videos v;