在 sequelize 中按关联表值查找总和和分组

Posted

技术标签:

【中文标题】在 sequelize 中按关联表值查找总和和分组【英文标题】:Finding sum and grouping by associated table values in sequelize 【发布时间】:2019-11-15 03:03:11 【问题描述】:

我有一个如下的捐款表。

捐款表

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

成员表

| id | name   | team_id   |
|----|--------|-----------|
| 01 |  tom   |         02|
| 02 |  jerry |         01|
| 03 |  jane  |         01|

团队表

| id | name   |
|----|--------|
| 01 |  TeamA |
| 02 |  TeamB |

如何求和并按团队分组表如下。

| amount | amount    |
|--------|-----------|
|  TeamA |       3000|
|  TeamB |        500|

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

const totalAmount = await DONATIONS.findAll(
  attributes: [
    'member_id',
    [sequelize.fn('sum', sequelize.col('amount')), 'total_amount'],
  ],
  include:[
    
      model: MEMBERS,
      include:[
        
          model:TEAMS,
          group:['name']
        ,
      ],
    ,
  ],
);

这不是this question I've asked before的重复项

【问题讨论】:

【参考方案1】:

你应该可以在mysql端处理它:

SELECT
    MAX(t.name) AS TeamName,
    SUM(d.amount) AS TotalAmount
FROM team t
INNER JOIN members m ON t.id = m.team_id
INNER JOIN donations d ON m.id = d.member_id
GROUP BY t.id
;

【讨论】:

难道没有办法使用 sequelize 语法代替原始查询吗? @Muljayan 我不知道。也许检查一下this。

以上是关于在 sequelize 中按关联表值查找总和和分组的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌大查询中按未嵌套值分组时获取不同值的总和

Sequelize 基于关联的查找

在熊猫中按周分组

在 PromQL/MetricsQL 中按时间分组和聚合

在SAS中按几个变量分组

如何在另一列中按条件分组的列中查找下一个日期?