使用 Sequelize 的列中分组数据的平均值

eme*_*aly 3 average sequelize.js

我正在尝试为所有具有相同“VenueId”的数据找到“评分”列的平均值。我让它使用原始代码,但需要在 Sequelize 中进行调整。工作原始代码是

SELECT venueId, AVG(rating) AS average FROM reviews GROUP BY VenueId
Run Code Online (Sandbox Code Playgroud)

我试过的代码是

Review.findAll({
    order: [[Sequelize.fn('AVG', Sequelize.col('rating'))]]
}).then(function(Venues) {})
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

正在执行(默认):SELECT id, review, rating, createdAt, updatedAt, VenueId FROM Reviews AS Review ORDER BY max(rating); 未处理的拒绝 SequelizeDatabaseError: UNKNOWN_CODE_PLEASE_REPORT: ORDER BY 的表达式 #1 包含聚合函数并应用于非聚合查询的结果。

有任何想法吗?

Dio*_*ias 5

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

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
}})
Run Code Online (Sandbox Code Playgroud)

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