使用派生值列查看
View with derived value column
我在尝试使用计算出的平均列创建视图时遇到了一些问题,对于每一部电影行,我都需要一个基于评分 table 中这部电影的所有评分的平均评分。
电影 table:
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;
评分table:
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);
它告诉我派生的 table 需要它自己的别名,我不知道这是否真的给我每行的平均值。
您正在尝试 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;
请注意,我修复了 table 别名,因此它们是 table 名称的缩写,这使得查询更容易阅读。
我在尝试使用计算出的平均列创建视图时遇到了一些问题,对于每一部电影行,我都需要一个基于评分 table 中这部电影的所有评分的平均评分。
电影 table:
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;
评分table:
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);
它告诉我派生的 table 需要它自己的别名,我不知道这是否真的给我每行的平均值。
您正在尝试 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;
请注意,我修复了 table 别名,因此它们是 table 名称的缩写,这使得查询更容易阅读。