如何选择最畅销的十大产品?

时间:2017-03-01 21:26:45

标签: sql oracle group-by sql-order-by

我有一个名为“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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

如果您使用的是Oracle 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

如果您不使用12c,则可以使用窗口功能,例如

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()vs rank(),具体取决于您希望如何处理关系。