与sequ​​elize不同的计数

时间:2016-04-26 06:12:50

标签: node.js count sequelize.js

我正试图通过续集来获得一个明显的计数,例如

'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子句,我在这种特殊情况下没有。

有人知道这个问题的正确解决方案吗?

3 个答案:

答案 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

相关问题