【问题标题】:Finding sum and grouping in sequelize在 sequelize 中查找总和和分组
【发布时间】:2019-10-25 12:59:46
【问题描述】:

我有一个如下的捐款表。

捐款表

| id| amount | member_id |
|---|--------|-----------|
| 0 |   500  |         01|
| 1 |  1000  |         02|
| 2 |  2000  |         01|

如何查找 sum 并按成员 id 对表进行分组,如下所示。

| amount | member_id |
|--------|-----------|
|  2500  |         01|
|  1000  |         02|

我尝试使用以下代码,但它似乎不起作用。

const salesValue = await DONATIONS.sum('amount', {
    group: 'member_id'
});

【问题讨论】:

  • 用 sql 的方式会很简单,select member_id,sum(amount) from Donations group by member_id,但是你想用node.js 的方式来实现吗?
  • 是的,我知道使用纯 sql 查询更容易,但我希望在我的应用程序中保持统一,因为我使用的是 sequelize ORM,所以我也想使用 sequelize 来实现这个功能。

标签: mysql node.js sequelize.js


【解决方案1】:

如果要获取值直接添加属性:raw: true

const totalAmount = await DONATIONS.findAll({
  attributes: [
    'member_id',
    [sequelize.fn('sum', sequelize.col('amount')), 'total_amount'],
  ],
  group: ['member_id'],
  raw: true
});

【讨论】:

    【解决方案2】:

    您必须使用sequelize.fn 进行聚合。要定位金额列,您必须使用 sequelize.col 并将它们分组,您必须传递 group 选项。

    const totalAmount = await DONATIONS.findAll({
            attributes: [
              'member_id',
              [sequelize.fn('sum', sequelize.col('amount')), 'total_amount'],
            ],
            group: ['member_id'],
          });
    

    【讨论】:

    • 如果可能的话,你应该添加文字来解释你的答案
    • 当我这样做时,我无法访问 totalAmount。它是一个带有dataValues 等的对象。你如何得到这个数字?
    【解决方案3】:

    这应该是您的 MySQL 查询:

    select sum(amount),member_id from myTable group by member_id;

    现在解析 nodejs 中的输出。

    谢谢

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      相关资源
      最近更新 更多