【发布时间】:2021-11-25 05:50:44
【问题描述】:
抱歉标题凌乱。
我有一个数据库,其中包含不同的电影名称以及每部电影所属的每种类型。 我想选择“短片”类型的电影,其电影长度大于所有类型电影的平均长度。
流派用 1 表示是或 0 表示否。 到目前为止,这是我的选择语句:
SELECT MovieTitle, MovieLength
FROM MOVIES
WHERE GenreShort = 1
HAVING MovieLength > AVG(MovieLength)
我将如何将电影长度与所有电影的平均值进行比较,而不仅仅是“短”类型电影?
【问题讨论】:
-
必须首先在单独的查询(“子查询”)中计算平均值。然后比较将在
WHERE子句中;没有GROUP BY就不能有HAVING子句。您没有以任何方式对短片进行分组;平均值是一个汇总的事实是一个单独的、不相关的问题。 -
为每种类型创建一个新列是一种反模式。您应该有一个流派表列出所有流派,然后是一个链接表,其中包含一部电影所具有的每个流派的行。一旦完成查询和表在添加流派时不需要更改,它可能会节省空间,可以更容易地利用索引等。
标签: sql oracle aggregate having