首页 > 解决方案 > 从表中获取具有最小值和最大值的 2 行

问题描述

我有一个包含以下列的表产品:

id  | product_name | price

1   | Red Shirt    | 10.0
2   | White Shirt  | 15.0
3   | Black Shirt  | 9.0
4   | Yellow Shirt | 12.0

如何进行查询以返回具有 max(price) 和 min(price) 的行?使用上面的示例,输出应该是:

id  | product_name | price

3   | Black Shirt  | 9.0
2   | White Shirt  | 15.0

在重复值的情况下,选择哪一个并不重要,只要输出只有 2 行。

标签: sqloracle

解决方案


其他几个答案不满足最后一个要求......“如果出现重复值,选择哪一个并不重要,只要输出只有 2 行。”

如果有两个具有相同值的产品,它们将返回三行。

下面通过添加 rownum = 1 子句来解决这个问题。

with testtab (id, product_name, price) as
(select 1, 'Red Shrit', 10.00 from dual
 union 
 select 2, 'Whtie Shrit', 15.00 from dual
 union 
 select 3, 'Black Shrit', 9.00 from dual
 union 
 select 4, 'Yellow Shrit', 12.00 from dual
 union 
 select 4, 'Pink Shrit', 15.00 from dual)
select id, product_name, price 
from testtab 
where price in (select max(price) from testtab)
and rownum = 1
union
select id, product_name, price 
from testtab where price in (select min(price) from testtab)
and rownum = 1

推荐阅读