表结构:

订单OrderID,OrderStatusID,......
订单明细ODID,ODProductID,ODProductQty,ODOrderID
产品ProductID,ProductName ...

到目前为止,我的SQL:

SELECT * FROM Products
INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ODProductID
INNER JOIN Orders ON OrderDetails.ODOrderID = Orders.OrderID
where Orders.OrderStatusID = '5'


OrderStatusID必须为5(对于已交付的订单)。

我只希望结果是最畅销产品的ProductName和NoOfProducts。

可以像销量最高的4种产品一样。

最佳答案

您必须按产品分组并汇总。
然后对按销售数量减少的结果进行排序,并将结果限制为4种产品:

SELECT p.ProductID, p.ProductName, COUNT(DISTINCT d.ODID) NoOfProducts
FROM Products p
INNER JOIN OrderDetails d ON p.ProductID = d.ODProductID
INNER JOIN Orders o ON d.ODOrderID = o.OrderID
WHERE o.OrderStatusID = '5'
GROUP BY p.ProductID, p.ProductName
ORDER BY NoOfProducts DESC
LIMIT 4

关于mysql - 获取最畅销产品的复杂SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58788113/

10-14 00:35