问题描述
我在尝试使用计算出的平均列进行视图时遇到了一些麻烦,对于每一部电影行,我都需要一个基于评分表中这部电影的所有评分的平均评分。
电影表:
CREATE TABLE IF NOT EXISTS streaming_db.movie(
id BIGINT NOT NULL auto_increment,name VARCHAR (100),description VARCHAR (1000),PRIMARY KEY (id)
) engine = InnoDB;
评分表:
CREATE TABLE IF NOT EXISTS streaming_db.rating(
id BIGINT NOT NULL auto_increment,rating_score DECIMAL(4,2) NOT NULL,comment VARCHAR (255) NULL,id_profile BIGINT NOT NULL,id_movie BIGINT NOT NULL,PRIMARY KEY (id)
) engine = InnoDB;
这是我目前所拥有的:
CREATE VIEW streaming_db.midia
AS
SELECT name,description
FROM streaming_db.movie a
INNER JOIN (SELECT avg(rating_score) AS averagerating from streaming_db.rating where
rating.id_movie = a.id);
它告诉我派生表需要自己的别名,我不知道这是否真的给了我每行的平均值。
解决方法
您正在 FROM
子句中尝试相关子查询。嗯,这实际上是一个真实的东西,叫做横向连接。
但这不是你的本意。将逻辑移至 SELECT
:
SELECT m.name,m.description,(SELECT avg(rating_score)
FROM sistema_streaming_db.rating r
WHERE r.id_movie = m.id
) as averageRating
FROM streaming_db.movie m;
请注意,我修复了表别名,因此它们是表名的缩写,这使查询更易于阅读。