首页 > 解决方案 > 如何在您选择的 SQL 子句中使用聚合函数?

问题描述

抱歉标题乱七八糟。

我有一个数据库,其中包含不同的电影标题以及每部电影所属的每种类型。我想选择“短片”类型的电影,其电影长度大于所有类型电影的平均长度。

流派表示为 1 表示是或 0 表示否。到目前为止,这是我的选择语句:

SELECT MovieTitle, MovieLength
FROM MOVIES
WHERE GenreShort = 1
HAVING MovieLength > AVG(MovieLength)

我将如何将电影长度与所有电影的平均值进行比较,而不仅仅是“短”类型电影?

标签: sqloracleaggregatehaving

解决方案


使用分析函数仅从SELECT表中提取一次:

SELECT MovieTitle,
       MovieLength
FROM   (
  SELECT MovieTitle,
         MovieLength,
         AVG(MovieLength) OVER () AS average_movielength
  FROM   MOVIES
  WHERE  GenreShort = 1
)
WHERE  movielength > average_movielength;

如果要从表中选择两次,则:

SELECT MovieTitle,
       MovieLength 
FROM   MOVIES 
WHERE  GenreShort = 1 
AND    MovieLength > (SELECT AVG(MovieLength) FROM MOVIES);

db<>在这里摆弄


推荐阅读