'min'和'max'不适用于其他信息

时间:2014-12-17 07:40:13

标签: sql oracle top-n

我想在项目表上计算minmax价格:

item [itemcode] [itemname] [iteminfo] [price]

我不仅要获得最低和最高价格,还要获得该商品的价格: 所以查询结果需要是最便宜的项目,项目名称项目信息,然后想要更改它的最大版本的语法。最昂贵的项目,itemname和iteminfo等     选择最小(价格)     来自项目

这很好用。返回与max相同的min。但是,当我尝试获取项目信息时,它会返回表格的所有行,而不仅仅是最便宜或最昂贵的单行。例如:

select min(price) as lowest, itemcode, itemname, iteminfo
from item
group by itemname

我不确定,我做错了什么?任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

也许这会有所帮助(它总会返回一个项目,即使其他项目的价格相同):

SELECT itemcode,
       itemname,
       iteminfo,
       price
  FROM(SELECT itemcode,
              itemname,
              iteminfo,
              price,
              ROW_NUMBER() OVER (ORDER BY price) AS rn
         FROM item
      )
 WHERE rn = 1;

如果您想要所有价格最低的商品,可以将ROW_NUMBER() OVER (ORDER BY price) AS rn替换为DENSE_RANK() OVER (ORDER BY price) AS rn

如果您想要具有最高价格的商品,只需将ORDER BY price更改为ORDER BY price DESC

答案 1 :(得分:0)

试试这个...

select itemcode, itemname, iteminfo, price
from item
where item.price in (
    select min(price) from item
    union
    select max(price) from item)

如果你想把结果分开,它会...... 最低

select itemcode, itemname, iteminfo, price
from item
where item.price = (
    select min(price) from item)

最高

select itemcode, itemname, iteminfo, price
from item
where item.price = (
    select max(price) from item)

请注意,这将返回价格最低/最高的所有商品... 如果多个项目的成本为1美元,则两者都将被退回

答案 2 :(得分:0)

最简单的解决方案:

select price as lowest, itemcode, itemname, iteminfo
from item 
where price = (select min(price) price from item)

等效也将最大化。

有多种方法可以计算最小值和最大值,如果您想在一个查询中同时获取两者,则可以使用分析。这里我使用了RANK()函数,因为它正确处理了多个项目的价格最低或最高的情况。

select case when maxp = 1 then 'HIGHEST' else 'LOWEST' end as type
       , price
       , itemcode
       , itemname
       , iteminfo
from (
       select price
              , itemcode
              , itemname
              , iteminfo
              , rank() over (order by price desc) maxp 
              , rank() over (order by price asc) minp 
       from item
      )
where maxp = 1
or    minp = 1

分析解决方案的优点是只能读取一次表格。这种效率对于大型表来说很有价值,特别是当我们使用的列没有编入索引时。因此,在现实生活中,我总是会使用分析版本,而不是我带领的简单版本。

分析功能非常强大。 Find out more

答案 3 :(得分:0)

如果您需要以特定商品名称的最低价格显示该行,请使用以下

with item1 as
(select price, itemcode, itemname, iteminfo
from item
), item2 as(select min(price) as lowest,itemname from item1
group by itemname)

select lowest,itemcode,item1.itemname,iteminfo
from item1,item2
where item1.itemname=item2.itemname 
and item1.price=item2.lowest