顺序聚合来自嵌套模型的数据

时间:2019-07-08 07:31:44

标签: mysql node.js express sequelize.js

我有3个具有以下关联的表。

STUDENTS.hasMany(REPORTS);

REPORTS.belongsTo(STUDENTS);
REPORTS.hasMany(TASKS);


TASKS.belongsTo(REPORTS);

任务表

| id | name   | report_id   |
|----|--------|-------------|
| 01 | taskA  |         01  |
| 02 | taskB  |         02  |
| 03 | taskC  |         03  |

报告表

| id | student_id |
|----|------------|
| 01 |        01  |
| 02 |        02  |
| 03 |        01  |

学生桌

| id | name |
|----|------|
| 01 | tom  |
| 02 | jim  |

我正在尝试创建一个如下所示的输出。在这里,我有学生的名字以及他们完成的任务的数量(通过报告表链接)。

| student| no_of_tasks |
|--------|-------------|
|   tom  |         01  |
|  jim   |         02  |

以下是我尝试使用sequelize进行的查询,但它似乎不起作用。

STUDENTS.findAll({
  attributes: [
    'name',
  ],
  include: [
    {
      model: REPORTS,
      attributes: [
        [sequelize.fn('COUNT', sequelize.col('tasks.id')), 'no_of_tasks'],
      ],
      include: [
        {
          model: TASKS,
          attributes: [],
        },
      ],
    },
  ],
  raw: true,
  nest: true,
});
  

我知道可以使用原始sql查询获得此解决方案   但我希望使用Sequelize js ORM找到答案。

1 个答案:

答案 0 :(得分:0)

我不确定nested: true的用途是什么...但是对于此查询,您缺少分组依据。在与raw: true,相同的级别上添加

group: ['name'],

对于这种类型的问题,您可以通过将由序列化生成的SQL复制并粘贴到MySqlWorkbench或类似的工具中进行调试,以了解问题所在。