MYSQL虚拟列平均值

时间:2016-02-23 17:08:53

标签: mysql

我正在尝试建立一个电影评论数据库,用于我的一些朋友的主页。

我想创建一个虚拟列,添加所有电影角色(从1-6开始)并制作平均值。

我的数据库是这样的:

Nummer|Navn|Forfatter|Sted|Dato|Karakter|Martin|Lars|Lund|Bjorn|Mikkel|Henrik|Silve|Olsen|Jørgen|Amund|Einar

One entry is for instance like this:

3|Garden State|Lars|Felix Kino|2005-01-03|5.11 |5|5|5|0|5|0|5|5|5|0|5|

但我希望专栏[Karakter](电影的平均评分)成为虚拟专栏。

我的问题是,正如你所看到的,并非每个朋友都会观看每一部电影。

那么如何自动创建具有平均评分的列?

编辑:

输入了很多信息并制作了两张桌子。一个有个人评级,一个有基本电影信息

http://i.stack.imgur.com/LxlVX.png || http://i.stack.imgur.com/3XY9q.png

你认为我应该做的更像这个地方我发现:(链接在Joachim Isaksson的帖子底部,因为stackoverflow妨碍我建立链接)

我觉得链接中的表格安排真的不太好。这不是很敏感吗?如果我拼写错误的名字会怎么样?这会弄乱结果。

edit2:非常混乱但是stackoverflow阻碍了我制作链接和抱歉的东西

edit3:经过很长一段时间,我把所有东西放在桌子里就像我被告知要做的那样。最终代码应该是这样的:

SELECT m.*, AVG(r.rating) AS average
FROM movie m
JOIN rating r
  ON m.id = r.movie_id
  GROUP BY m.id

我有3个表:1个包含评论者和ID的简短列表。一个有电影信息。还有一个有电影ID,评论家ID,评论员等级。

1 个答案:

答案 0 :(得分:0)

此查询应该适用于您当前的表结构;

SELECT *,
    (`Martin` + `Lars` + `Lund` + `Bjorn` + `Mikkel` + `Henrik` + 
     `Silve` + `Olsen` + `Jorgen` + `Amund` + `Einar`)
   /
    ((`Martin`!=0) + (`Lars`!=0) + (`Lund`!=0) + (`Bjorn`!=0) + (`Mikkel`!=0) + 
     (`Henrik`!=0) + (`Silve`!=0) + (`Olsen`!=0) + (`Jorgen`!=0) + (`Amund`!=0) + 
     (`Einar`!=0)) AS average 
FROM myTable

...所有名称都在SQL中进行了硬编码。

如果你将电影分成一张桌子并将评论分成另一张桌子,你就可以得到一些与之相近的东西;

SELECT m.*, AVG(r.rating) AS average
FROM movie m
JOIN rating r
  ON m.id = r.movie_id

......对姓名或朋友​​数量没有硬性依赖。