显示最昂贵电影的成本在 2 美元以内的查询
Posted
技术标签:
【中文标题】显示最昂贵电影的成本在 2 美元以内的查询【英文标题】:A query that shows the cost within $2 of the most expensive film 【发布时间】:2021-03-16 06:31:57 【问题描述】:TITLE GEN DURATION PRODUCTION_YEAR MED PURCHASE_PRICE PURCHASE_ MOVIE_ID
这些是我的专栏
我正在使用 oracle 9i
感谢任何可以提供帮助的人
【问题讨论】:
请添加示例数据、预期结果和一些逻辑来创建查询以及您尝试过的内容。 【参考方案1】:You know how to get the price of the most expensive movie。因此,只需使用该信息来过滤所有电影。
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 因为我们知道子查询只返回一行,所以我们不需要任何连接条件。 WHERE 子句根据价格进行过滤。
您说您使用的是 Oracle 9i。为什么会有这么旧的版本?它已经超出了十年的扩展支持!无论如何,这就是引入 WITH 子句(和 ANSI-92 连接语法)的版本。它在文档中。 Find out more
【讨论】:
【参考方案2】:您可以使用 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
【讨论】:
【参考方案3】:您可以在WHERE
子句的子查询中使用MAX
函数,如下:
SELECT * FROM MOVIE
WHERE PURCHASE_PRICE >= (SELECT MAX(PURCHASE_PRICE) - 2 FROM MOVIE)
【讨论】:
【参考方案4】:你可以使用窗口函数:
select t.*
from (select t.*, max(PURCHASE_PRICE) over () as max_price
from t
) t
where PURCHASE_PRICE >= max_price - 2;
【讨论】:
以上是关于显示最昂贵电影的成本在 2 美元以内的查询的主要内容,如果未能解决你的问题,请参考以下文章
在MS Access中,当查询结果为空时,是否有一个简单的方法来显示0.00美元的金额?