我正试图通过续集来获得一个明显的计数,例如
'SELECT COUNT(DISTINCT(age)) AS `count` FROM `Persons` AS `Person`'
只要我使用原始查询,我就会得到所需的结果。但是,一旦我更改为sequelize count函数,查询就会在Postgres中打破:
Person.count({distinct:'age'}).then(...);
结果
'SELECT COUNT(DISTINCT(*)) AS `count` FROM `Persons` AS `Person`'
导致语法错误。在How to get a distinct count with sequelize?等不同帖子中描述的解决方案不起作用,除非您添加一个include语句或where子句,我在这种特殊情况下没有。
有人知道这个问题的正确解决方案吗?
答案 0 :(得分:2)
您必须使用Sequelize aggregation才能使其正常工作。
Model.aggregate(field, aggregateFunction, [options])
返回:返回聚合结果强制转换为options.dataType,除非 options.plain为false,在这种情况下,完整的数据结果为 返回。
示例:
Person.aggregate('age', 'count', { distinct: true })
.then(function(count) {
//.. distinct count is here
});
执行(默认):
SELECT count(DISTINCT("age")) AS "count" FROM "persons" AS "person";
答案 1 :(得分:1)
您可以执行以下操作:
models.User.findAll({
attributes: ['user_status',[sequelize.fn('COUNT', sequelize.col('user_status')), 'total']] ,
group : ['user_status']
});
那将返回类似:
[
{ user_status : 1 , total : 2 },
{ user_status : 2 , total : 6 },
{ user_status : 3 , total : 9 },
...
]
然后,您可以遍历返回的数据并检查状态
答案 2 :(得分:0)
在最新版本中,您应该这样做
Person.count({distinct:true, col: 'age'}).then(...);
请参阅:http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-count