当我在 nodejs 中使用 sequelize 进行 groupby 时,我得到计数​​为 1 而不是 0

Posted

技术标签:

【中文标题】当我在 nodejs 中使用 sequelize 进行 groupby 时,我得到计数​​为 1 而不是 0【英文标题】:i am getting count as 1 instead of 0 when i did groupby using sequelize in nodejs 【发布时间】:2021-04-13 03:16:37 【问题描述】:

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

项目表包含

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

公司表包含

company_id company_name
1 xyz
2 test
3 abc

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

我在 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 = function(models) Company.hasMany(models.Project, 外键:“company_id” )

Project.associate = 功能(模型) Project.belongsTo(models.Company, foreignKey: 'company_id', )

【问题讨论】:

您是否在创建表时定义了关联??...项目和公司之间的外键为 company_id 是的。我已经定义了。您可以在问题中找到关联。刚才我已经编辑过了。 这个***.com/questions/20460270/… 可能会有所帮助 对不起,我觉得它没有帮助。 【参考方案1】:

如果你想要 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 中查询。【参考方案2】:

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

【讨论】:

以上是关于当我在 nodejs 中使用 sequelize 进行 groupby 时,我得到计数​​为 1 而不是 0的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sequelize (NodeJS) 而不是 * 指定特定字段

何时在 MYSQL 中使用 Sequelize?

Nodejs / PostgreSQL sequelize - 如何更新/更改数据库中的模型?

nodejs使用Sequelize框架操作数据库

使用 NodeJS 将启动和停止时间发布到 mysql(sequelize)

无法使用 sequelize 从本地节点应用程序连接到 heroku postgresql 数据库