我想在项目表上计算min
和max
价格:
item [itemcode] [itemname] [iteminfo] [price]
我不仅要获得最低和最高价格,还要获得该商品的价格: 所以查询结果需要是最便宜的项目,项目名称项目信息,然后想要更改它的最大版本的语法。最昂贵的项目,itemname和iteminfo等 选择最小(价格) 来自项目
这很好用。返回与max相同的min。但是,当我尝试获取项目信息时,它会返回表格的所有行,而不仅仅是最便宜或最昂贵的单行。例如:
select min(price) as lowest, itemcode, itemname, iteminfo
from item
group by itemname
我不确定,我做错了什么?任何人都可以帮助我吗?
答案 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