我正试图为电影评论制作一个数据库,供我的一些朋友在主页上使用。
我想要创建一个虚拟列,它添加所有电影字符(从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 _~_
你认为我应该做得更像我发现的这个地方:(链接在Joachim Isaksson的帖子底部,因为堆栈溢出阻碍了我建立链接)
我觉得桌子的排列在链接上真的不太好。这不是很敏感吗?如果我拼错了一个名字。会把结果搞砸的。
edit2:非常混乱,但是堆栈溢出阻碍了我把链接和其他东西弄得很抱歉
edit3:经过很长一段时间,我已经把所有的东西都放在桌子上了,就像别人告诉我的那样。最终代码应该如下所示:
SELECT m.*, AVG(r.rating) AS average
FROM movie m
JOIN rating r
ON m.id = r.movie_id
GROUP BY m.id
我有三张表:一张很短的名单,上面有评审员和id。有电影信息的。还有一个有电影标识的,影评人的,评论员的。
发布于 2016-02-23 18:18:03
此查询应适用于当前表结构;
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
...with所有在SQL中硬编码的名称。
如果你要把电影分割成一个表,而评论则是另一个表,你会得到一些接近这个的东西;
SELECT m.*, AVG(r.rating) AS average
FROM movie m
JOIN rating r
ON m.id = r.movie_id
...with不依赖于名字或朋友的数量。
https://stackoverflow.com/questions/35583804
复制相似问题