我正在尝试建立一个电影评论数据库,用于我的一些朋友的主页。
我想创建一个虚拟列,添加所有电影角色(从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,评论员等级。
答案 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
......对姓名或朋友数量没有硬性依赖。