【问题标题】:Getting most sold products complex sql获取最畅销的产品复杂的sql
【发布时间】:2020-03-06 08:36:24
【问题描述】:

表结构:

订单 OrderID、OrderStatusID、......
OrderDetails ODID、ODProductID、ODProductQty、ODOrderID
产品产品 ID、产品名称...

到目前为止我的 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 名产品一样。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您必须按产品分组并汇总。
    然后根据售出的产品数量对结果进行降序排序,并将结果限制为 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
    

    【讨论】:

    • 你的代码可以工作,但我用过这个:我的代码有什么问题:SELECT Products.ProductName, Products.ProductCode, COUNT(Products.ProductID) as MostProducts FROM Products INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ODProductID INNER JOIN Orders ON OrderDetails.ODOrderID = Orders.OrderID where Orders.OrderStatusID = '5' GROUP BY Products.ProductID ORDER BY MostProducts DESC LIMIT 5
    • 前 3 个结果与您的结果相同。不是 5。知道我在哪里出错了吗?还是我的方法不对?
    • 好吧,我认为它的原因是其他记录的值相同。没关系。
    • LIMIT 不会返回有关系的行。如果最后一个位置有相同 NoOfProducts 的产品,它们将被排除在外。
    【解决方案2】:

    您需要聚合,但您需要“最畅销”的定义。我的猜测是这是基于数量的:

    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>;
    

    【讨论】:

    • @Webgen 。 . .您的问题会表明数量就是您想要的:“最畅销的产品”。
    • 你的查询对我的朋友很有帮助。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多