Sequelize按Vendor_name分组统计:需区分Total与大于0的Images、PDF计数
解决Sequelize分组统计中带条件计数的问题
你当前的代码里,COUNT(Images)和COUNT(Technicals_PDF)会统计所有非NULL的条目,不管字段值是不是0,所以和统计所有条目的Total结果一致。要实现只统计值大于0的条目,需要在COUNT里加入条件判断,让不满足条件的条目返回NULL(COUNT会自动忽略NULL值)。
直接修改attributes里的对应字段即可,用sequelize.where来过滤字段值大于0的情况:
const vendorSummary = await IndexData.findAll({ group: 'Vendor_name', attributes: [ 'Vendor_name', // 统计所有条目(假设Item_number无NULL值) [sequelize.fn('COUNT', sequelize.col('Item_number')), 'Total'], // 仅统计Images值>0的条目 [sequelize.fn('COUNT', sequelize.where(sequelize.col('Images'), '>', 0)), 'Images'], // 仅统计Technicals_PDF值>0的条目 [sequelize.fn('COUNT', sequelize.where(sequelize.col('Technicals_PDF'), '>', 0)), 'PDF'], ], });
原理说明:
COUNT(expr)只会统计expr不为NULL的行数,当字段值≤0时,sequelize.where(...)会返回NULL,这部分条目就不会被计入统计。- 这种方式既避免了用SUM导致的数值累加问题,又精准统计了符合条件的条目数量。
内容的提问来源于stack exchange,提问作者Kazeyoshi
相关产品推荐
相关产品推荐

