-2

我正在尝试计算物品表上的价格min和价格:max

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

我不仅想获得最低和最高价格,还想知道商品是什么:所以查询结果需要是最便宜的商品、商品名称商品信息,然后想要更改它的最高版本的语法。最贵的商品、商品名称和商品信息等 select min(price) from item

这工作正常。返回与最大值相同的最小值。但是,当我尝试获取项目信息时,它会返回表的所有行,而不仅仅是最便宜或最贵的单行。例如:

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

我不确定,我做错了什么?谁能帮我?

4

4 回答 4

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 rnDENSE_RANK() OVER (ORDER BY price) AS rn.

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

于 2014-12-17T07:54:37.500 回答
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

解析解的优点是只读表一次。这种效率对于大型表很有价值,尤其是当我们使用的列没有被索引时。所以在现实生活中,我总是会选择分析版本,而不是我领导的更简单的版本。

分析功能非常强大。 了解更多

于 2014-12-17T07:55:10.903 回答
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 美元,则两者都将被退回

于 2014-12-17T07:48:08.217 回答
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
于 2014-12-17T10:42:11.387 回答