【问题标题】:Sequelize get most sold products / "most apperance of relation"Sequelize 获得最多销售的产品/“关系的最表象”
【发布时间】:2021-09-01 16:38:33
【问题描述】:

我遇到了与此处描述的类似的问题: https://dba.stackexchange.com/questions/52476/how-to-get-a-list-result-of-best-selling-items

我的 order_items 表如下所示:

orderID productID quantity
1 5 7
3 4 8
1 2 3
and so on

我正在尝试使用 Sequelize 获得销量最高的产品,我使用 sequelize 定义了 'products' 表和 'order_items' 表之间的关系。

并且还获得被引用次数最多的产品(出现次数最多的产品,无论数量多少)。

【问题讨论】:

    标签: mysql sql sequelize.js


    【解决方案1】:

    要获得列的最大值,您可以使用:

    const mostSold = await order_items.findOne({
      attributes: [[sequelize.fn('max', sequelize.col('quantity')), 'quantity']]
    }).getProduct();
    

    要获得最多发生,您可以使用:

    const mostOccurring = await order_items.findOne({
      attributes: [[sequelize.fn('count', sequelize.col('productID')), 'productId']]
    }).getProduct();
    

    【讨论】:

    • 谢谢,第二个选项的计数非常好。但至于第一个,我试图获得总销量最高的项目。因此,如果项目 1 被订购了 4 次,总数量为 18。我可以将原始查询与链接问题的 SQL 一起使用,但没有办法用 sequlize 来做到这一点?
    • 不客气,关于计数部分,我有点忙,所以我没有早点回复,无论如何看起来你已经在你发布的答案中弄清楚了:)
    【解决方案2】:

    感谢Finding sum and grouping in sequelize 将函数调用为 attirubte 我做了一些修改,包括产品参考、订单和限制

    对于大多数推荐产品(独特销售):

    async function getUniqueBestSelling(limit: number) {
      const res = await database.model("order_items").findAll({
        attributes: [
          "productId",
          [sequelize.fn("count", sequelize.col("productId")), "totalOrders"],
        ],
        group: ["productId"],
        include: [{ model: database.model("products") }],
        order: [[sequelize.col("totalOrders"), "DESC"]],
        limit: limit,
      });
      const plainRes = getPlainRes(res);
    
      return plainRes;
    }
    

    总销售额(数量)

    async function getBestSelling(limit: number) {
      const res = await database.model("order_items").findAll({
        attributes: [
          "productId",
          [sequelize.fn("sum", sequelize.col("quantity")), "totalQuantity"],
        ],
        group: ["productId"],
        include: [{ model: database.model("products") }],
        order: [[sequelize.col("totalQuantity"), "DESC"]],
        limit: limit,
      });
      const plainRes = getPlainRes(res);
    
      return plainRes;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多