2017-03-01 47 views
0

我有一个名为“items”的表,其中存储了每个订单中销售的每个产品的信息,但是我想要检索前10个订单,并且销售量最大。我执行了一条SELECT语句来检索每个订单中销售的产品数量,但我不知道如何只能检索TOP 10订单。谢谢。如何选择最畅销的十大产品?

SELECT codigo_orden AS ORDER_ID, COUNT(codigo_producto) AS PRODUCTS_SOLD 
FROM  cs_items 
GROUP BY codigo_orden 
ORDER BY 2 DESC; 

enter image description here

但是,我只想找回十大最具销售的产品!类似的东西:

enter image description here

+0

是否有计数的关系,你只需要一个?该如何选择? –

+0

请参阅https://oracle-base.com/articles/misc/top-n-queries –

+0

我只需要前10位订单无关紧要,如果有两个订单具有相同的x个产品数量。 – Rattlesnake

回答

2

如果您正在使用Oracle 12c中,你可以,如果你不使用12C使用行限制条款,像

SELECT codigo_orden AS ORDER_ID, COUNT(codigo_producto) AS PRODUCTS_SOLD 
FROM  cs_items 
GROUP BY codigo_orden 
ORDER BY 2 DESC 
FETCH FIRST 10 ROWS ONLY 

,那么你可以使用一个窗口功能,例如

select order_id, products_sold 
from (
    SELECT codigo_orden AS ORDER_ID, 
      COUNT(codigo_producto) AS PRODUCTS_SOLD, 
      rank() over (order by count(codigo_producto)) as rnk 
    FROM  cs_items 
    GROUP BY codigo_orden 
) 
where rnk <= 10 
order by products_sold 

您可能需要使用DENSE_RANK()与级别(),这取决于你想如何处理关系。

+0

谢谢,但我使用Oracle 11g。 – Rattlesnake

+0

@Rattlesnake。我根据您的评论扩大了我的答案。 – BobC

+0

非常感谢您的帮助! – Rattlesnake

3

尝试以下操作:

select ORDER_ID, PRODUCTS_SOLD 
from (
SELECT codigo_orden AS ORDER_ID, COUNT(codigo_producto) AS PRODUCTS_SOLD 
FROM  cs_items 
GROUP BY codigo_orden 
ORDER BY 2 DESC) 
WHERE ROWNUM <= 10; 
相关问题