Reputation: 25
TABLE STRUCTURES:
Orders OrderID, OrderStatusID, ......
OrderDetails ODID,ODProductID, ODProductQty, ODOrderID
Products ProductID, ProductName...
MY SQL so far:
SELECT * FROM Products
INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ODProductID
INNER JOIN Orders ON OrderDetails.ODOrderID = Orders.OrderID
where Orders.OrderStatusID = '5'
OrderStatusID must be 5 (For Delivered Order).
I just want result to be ProductName & NoOfProducts of most sold product.
Can be like top 4 products sold.
Upvotes: 0
Views: 71
Reputation: 1269773
You need aggregation, but you need a definition of "most sold". My guess is that this is based on quantity:
SELECT p.ProductID, p.ProductName, SUM(od.ODProductQty) as TotalQty
FROM Products p INNER JOIN
OrderDetails od
ON p.ProductID = od.ODProductID INNER JOIN
Orders o
ON od.ODOrderID = o.OrderID
WHERE Orders.OrderStatusID = 5
GROUP BY p.ProductID, p.ProductName
ORDER BY TotalQty DESC
LIMIT <n>;
Upvotes: 0
Reputation: 164089
You must group by product and aggregate.
Then sort the results descending for the number of products sold and limit the results to 4 products:
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
Upvotes: 1