collection 中最昂贵的电影)的成本是多少?

What was the cost for the most expensive movie(s) in the collection?

大家好,我知道放映最昂贵电影的代码,但放映最贵电影和紧随其后的电影的代码是什么?我想这就是问题所在。这是我为一部电影获得的代码。

SELECT *
   FROM movie
   WHERE purchase_price = 
    (SELECT MAX(purchase_price) FROM movie);

按价格对它们进行排名(在子查询中),并获取前两个。像这样:

select *
from (select m.*,
             rank() over (order by m.purchase_price desc) rnk
      from movie m
     )
where rnk <= 2

根据您拥有的数据,您还可以考虑使用 ROW_NUMBERDENSE_RANK 分析函数。

如果您确实想要两部最昂贵的电影,您可以对查询进行排序并使用 fetch first 子句:

SELECT *
FROM  movie
ORDER BY purchase_price DESC
FETCH FIRST 2 ROWS ONLY

如果多部电影可以有相同的价格,而你想找到所有价格最高的两部电影,你可以使用dense_rank window函数:

SELECT *
FROM   (SELECT *, DENSE_RANK() OVER (ORDER BY purchase_price DESC) AS rk
        FROM   movie) m
WHERE  rk <= 2

既然你的描述有点含糊,要找到你喜欢的解决方案,你将不得不尝试其中的几个。 例如,您可以尝试使用 ORDER BY 条件。使用此条件,您将检索所有电影,从顶部最昂贵的电影开始。

SELECT
    *
FROM
    movie
ORDER BY
    purchase_price DESC;
FETCH FIRST 2 ROWS ONLY

不过,您还可以尝试其他解决方案。您可以在子查询中按价格对它们进行排名,然后获取所有答案。另一个例子是在最大值和最小值(或任何其他值)之间使用。您可以获得一些技术含量更高且更难实施的解决方案。

我宁愿使用 FETCH FIRST 2 ROWS WITH TIES 选项,它会为您提供前两部最昂贵的电影,并且还会处理多部购买价格相同的电影

SELECT *
 FROM  movie
ORDER BY purchase_price DESC
FETCH FIRST 2 ROWS ONLY TIES;