当我在 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) 而不是 * 指定特定字段
Nodejs / PostgreSQL sequelize - 如何更新/更改数据库中的模型?