返回表中的所有行和特定行的另一行信息

时间:2015-10-21 23:58:14

标签: mysql sql sqlite

我正在尝试使用两个表格,视频和评分为网站制作简单的视频费率系统。基本上,“视频”表上有一个视频记录,然后在“评级”表中的视频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函数)或重复的行。

感谢。

1 个答案:

答案 0 :(得分:0)

使用相关子查询:

SELECT v.*,
       (SELECT avg(r.rate)
        FROM ratings r
        WHERE v.id = r.video_id
       ) as avgrating
FROM videos v;