检索最畅销的产品
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;
我想从 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;