查看Oracle中的前N个结果

时间:2014-09-15 03:07:50

标签: oracle10g

我试图通过一个简单的查询来展示公司中最畅销的产品,特别是排名前三的产品。 为了获得所有结果,我正在运行此查询

select product_name, (qty_on_order - qty_on_hand) as Sales 
from products, product_inventory
where product_inventory.product_id = products.product_id
order by Sales Desc

这会返回除订购之外的所有内容,但我只需查看前三项,我使用了ROW_NUMBER但它没有给我我想要的结果。

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

select *
from (select product_name, (qty_on_order - qty_on_hand) as Sales 
      from products join
           product_inventory
           on product_inventory.product_id = products.product_id
      order by Sales Desc
     ) p
where rownum <= 3;

答案 1 :(得分:0)

你也可以通过使用等级函数来解决这个问题,这将更加容易。 请尝试以下查询

选择rnk,product_name,(qty_on_order - qty_on_hand)作为Sales 从 (选择rnk,product_name,(qty_on_order - qty_on_hand)作为Sales, rank()over(PARTITION BY product_name ORDER BY Sales DESC)为rnk 来自产品,product_inventory) 其中rnk&lt; = 3;