2016-03-04 81 views
1

我试图找到具有相同'VenueId'的所有数据的“收视率”列的平均值。我使用原始代码工作,但需要在Sequelize中进行调整。工作原始代码是SELECT venueId, AVG(rating) AS average FROM reviews GROUP BY VenueId我试过的代码是Review.findAll({ order: [[Sequelize.fn('AVG', Sequelize.col('rating'))]] }).then(function(Venues) {}我收到一个错误:执行(默认):SELECT id,review,rating,createdAt,updatedAt,VenueId FROM评论AS Review ORDER BY max(rating);未处理的拒绝SequelizeDatabaseError:UNKNOWN_CODE_PLEASE_REPORT:ORDER BY的表达式#1包含聚合函数并适用于非聚合查询的结果。有任何想法吗?使用Sequelize在列中分组数据的平均值

回答

2

这可能需要一些调整,因为我不知道你的模型,但我建议你尝试以下方法:

Review.findAll({ 
    attributes: ['venueId', [models.sequelize.fn('AVG', models.sequelize.col('venue_id')), 'venueIdCount']], 
    group: 'venue_id' 
    order: [[models.sequelize.fn('AVG', models.sequelize.col('venue_id')), 'DESC']] 
}).then(function() { 
    //Do something 
}}) 

重要注意:当我使用“venueId”我的意思是属性的名称在你的模型上,当我使用“venue_id”时,我的意思是数据库表中列的名称。他们可能是相同或不同的,所以随时调整它。

0

必须这样做

Review.findAll({ 
    attributes: ['venueId', [models.sequelize.fn('AVG', 
    models.sequelize.col('rating')), 'ratingAvg']], 
    group: ['venueId'], 
    order: [[models.sequelize.fn('AVG', models.sequelize.col('rating')), 'DESC']] 
}).then(function() { 
    //Do something 
}}) 

或者,这与异步/等待

async(() => { 
    return await(Review.findAll({ 
     attributes: ['venueId', [models.sequelize.fn('AVG', 
     models.sequelize.col('rating')), 'ratingAvg']], 
     group: ['venueId'], 
     order: [[models.sequelize.fn('AVG', models.sequelize.col('rating')), 'DESC']]})) 
})