显示最昂贵电影的成本在 2 美元以内的查询

A query that shows the cost within $2 of the most expensive film

TITLE   GEN DURATION    PRODUCTION_YEAR MED PURCHASE_PRICE  PURCHASE_   MOVIE_ID

这些是我的专栏

我正在使用 Oracle 9i

感谢任何能提供帮助的人

。因此,只需使用该信息来过滤所有电影。

with exmv as 
  (select max(purchase_price) as mx_price 
   from movie)
select movie.*
from       movie 
cross join exmv
where movie.purchase_price >= exmv.mx_price - 2
;

此查询将聚合查询放在它在 FROM 子句中引用的子查询分解子句中。我们使用 CROSS JOIN 是因为我们知道子查询 returns 只有一行,所以我们不需要任何连接条件。 WHERE 子句根据价格过滤。


您说您使用的是 Oracle 9i。为什么这么旧的版本?它已经有十年没有扩展支持了!无论如何,这是引入了 WITH 子句(和 ANSI-92 连接语法)的版本。它在文档中。 Find out more

您可以使用 Oracle 9i 中提供的分析函数来执行此操作:

select *
from (
    select m.*, max(purchase_price) over() as max_purchase_price
    from movie m
) m
where purchase_price >= max_purchase_price - 2

您可以在WHERE子句中的子查询中使用MAX函数,如下所示:

SELECT * FROM MOVIE
 WHERE PURCHASE_PRICE >= (SELECT MAX(PURCHASE_PRICE) - 2 FROM MOVIE)

您可以使用 window 函数:

select t.*
from (select t.*, max(PURCHASE_PRICE) over () as max_price
      from t
     ) t
where PURCHASE_PRICE >= max_price - 2;