显示最昂贵电影的成本在 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美元的金额?

假如FIL币再次冲上200美元,挖矿会增加多少成本?

2021年IBM数据泄露成本报告:平均成本破纪录,达到424万美元

AWS的下一站:3.8万亿美元的企业IT市场

Ponemon:2018年度数据泄露成本分析报告

2021年数据泄露成本报告解读