Mysql 具有派生值列的视图
我在尝试创建一个包含计算平均值列的视图时遇到了一些问题,对于每一个电影行,我需要一个基于评级表中该电影的所有评级的平均评级 电影表:Mysql 具有派生值列的视图,mysql,sql,sql-view,Mysql,Sql,Sql View,我在尝试创建一个包含计算平均值列的视图时遇到了一些问题,对于每一个电影行,我需要一个基于评级表中该电影的所有评级的平均评级 电影表: 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.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 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;
请注意,我修复了表别名,因此它们是表名的缩写,这使查询更易于阅读。问题是什么?它告诉我派生表需要自己的别名,我不知道这是否真的给了我每行的平均值。这应该是个问题。但是,即使添加了表别名,查询仍然会被破坏。很抱歉,我将添加它。