2016-03-04 109 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']]})) 
})