查看派生值列

问题描述

我在尝试使用计算出的平均列进行视图时遇到了一些麻烦,对于每一部电影行,我都需要一个基于评分表中这部电影的所有评分的平均评分。

电影表:

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;

请注意,我修复了表别名,因此它们是表名的缩写,这使查询更易于阅读。