当前位置: 首页 > 知识库问答 >
问题:

具有派生值列的视图

苍志文
2023-03-14

我在尝试创建一个带有计算平均列的视图时遇到了一些麻烦,对于每个电影行,我都需要一个基于分级表中该电影的所有分级的平均分级。

电影表:

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); 

它告诉我派生表需要自己的别名,我不知道这是否真的给出了每行的平均值。

共有1个答案

邵麒
2023-03-14

您正在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;

注意,我修正了表别名,使其成为表名的缩写,这使查询更容易阅读。

 类似资料:
  • 问题内容: JPA 2.0(Hibernate 4.2.4.Final/Spring 3.2.8.Release)/ Mysql 5.6 对于管理实体E w /自动生成的主键,例如 出于传统原因,foo需要等于:{id}:。例如,如果id为204,则foo将为“:204:”,因此在事务中发生这种情况是可行的 有没有一种更好的方法来计算值取决于生成的ID的派生列?没有上述技巧,即在持久化之后直接更新

  • 问题内容: 我有一个类型节点的对象。 Node.cs 拨打电话时,序列化工作如下: 我的问题是以下调用不起作用。 该调用导致以下错误: 我必须如何设计反序列化调用? 问题答案: Json.NET不会序列化事件,因此存储库基本类型中的in (序列化)期间不应引起问题。 但是,该存储库中的至少一种类型具有一个委托而不是一个值更改时要处理的事件,尤其是 : 目前尚不清楚为什么为此目的使用委托而不是事件,

  • 问题内容: 我有一个带有集合的类,它们是Hibernate管理的POJO。我还使用 hbm.xml 文件映射了我的实体。当用户转到管理屏幕时,我希望他将数据查看到表中,该表还将包含最近完成的工作。但是,只有访问可检测内容的详细信息页面,才能使用完整的修订集。 我的机会是显示最后的修订日期,该日期将作为每个实例的属性单独加载。所以我有这样的事情: detectable.hbm.xml 这是行不通的,

  • 问题内容: 给定两个示例表: 门票表 属性表 我如何获得这样的视图: 重要的是要注意,属性表并不总是相同的。一些“票证”可能具有其他人没有的属性。 这有可能吗? 问题答案: 您可以使用PIVOT执行此操作。在执行PIVOT时,可以使用以下两种方法之一进行操作:使用“静态数据透视表”(将对行进行编码)或“动态数据透视表”将在运行时创建列列表: 静态数据透视表(请参见SQL Fiddle中的Demo)

  • 问题内容: 我有一个产生以下结果集的视图: 我需要将其转换为: 我只使用交叉表使用列,就知道该怎么做。如何在目标结果集中使用和产生新列?如果我只是在查询中添加列,它会抱怨“无效的源数据SQL语句”。 我正在使用PostgreSQL 9.3.6。 问题答案: 一种方法是使用复合类型: 或者,为临时使用(在会话期间注册类型): 然后,根据需要运行交叉表并分解复合类型: 所有括号都是 必需的 ! 基础知