检索最畅销的产品

Retrieve top selling products

我想从 NorthWind 数据库收到订单中销量前 5 的产品。

数据库有一堆 table,如订单、订单详细信息、客户等。有人建议我使用下面的订单详细信息 table:

现在,我尝试了以下方法:

WITH cte AS (
    SELECT 
       OrderID,
       Quantity,
       ProductID,
       ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY OrderID) as row_num
    FROM [Order Details] 
)

SELECT * 
FROM cte 
WHERE row_num IN (SELECT row_num FROM cte WHERE row_num <=10)
ORDER BY  OrderID;

认为这现在为每个订单检索 10 行,它们不是根据售出数量排序的,并且没有正确检索最畅销的产品,因为对于某些订单,最畅销的产品超出了基于行号 I 的前 10 行在 SQL.

中使用 ROW_NUMBER() 函数

编辑:例如,如果我有 10 个订单,每个订单有 20 个产品,那么我想要每个产品的前 5 个,所以结果 table 应该有 50 个总行数。

你应该做一个
SELECT DISTINCT productid FROM OrderDetails ORDER BY quantity GROUP BY productId LIMIT 5
至少这是 mysql 语法。

编辑后:

WITH cte AS (
SELECT 
   OrderID,
   Quantity,
   ProductID,
   ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY Quantity DESC) as row_num
FROM [Order Details] 
)

SELECT * 
FROM cte 
WHERE row_num <= 5
ORDER BY  OrderID;