当我在 nodejs 中使用 sequelize 进行分组时,我被计为 1 而不是 0

i am getting count as 1 instead of 0 when i did groupby using sequelize in nodejs

我有两个table“项目”和“公司”。我在 sequelize 中将他们的模型创建为 'Project' 和 'Company'。

项目 table 包含

project_id company_id project_name
1 1 project1
2 2 project2
3 2 project3

公司table包含

company_id company_name
1 xyz
2 test
3 abc

我的要求是获取公司table中的所有公司以及他们拥有的项目数量。

我已经在 sequelize as

中编写了查询
const result = await Company.findAll({
    attributes: [ ['company_id', 'id'] ,'company_name', [Sequelize.fn('COUNT', 'Project.project_id'), 'no_of_projects'] ],
    include: [{ model: Project, attributes: [] }],
    group: ['company_id'],
    order: [
        [sortBy, sortOrder]
    ],
    offset: index,
    limit: limit,
    subQuery: false
})

但是对于公司“abc”,我得到的 no_of_projects 是 1 而不是 0,因为它没有任何项目。如果公司没有项目,我需要将 no_of_projects 设置为 0。我是 sql 和续集的新手。谁能帮我解决这个问题。提前致谢。

这些是协会

Company.associate = 函数(模型){ Company.hasMany(models.Project, { 外键:“company_id” }) }

Project.associate = 函数(模型){ Project.belongsTo(models.Company, { 外键:'company_id', }) }

如果你想要 SQL 那么你可以使用以下内容:

select c.company_id, c.company_name, count(p.project_id) as num_of_project
  from company c left join project p on p.comapny_id = c.company_id
group by c.company_id, c.company_name

我发现我的 sequelize 查询有误。 而不是 [Sequelize.fn('COUNT', 'Project.project_id') 当我用 [Sequelize.fn('COUNT', Sequelize.col('project_id')) 替换它时它起作用了 我需要将其指定为要续集的列,否则它会将空字符串视为值。这就是为什么我被计为 1 而不是 0 的原因。