2017-03-01 61 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;