显示最昂贵电影的成本在 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;
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;