Sequelize 获得最畅销的产品 / "most apperance of relation"

Sequelize get most sold products / "most apperance of relation"

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

我的 order_items table 看起来像:

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

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

并获得被引用次数最多的产品(出现次数最多的产品,与数量无关)。

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

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

感谢 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;
}