我试图找到一个'评分的平均值。所有具有相同' 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来自评论AS评论ORDER BY max(评级);未处理 rejection SequelizeDatabaseError:UNKNOWN_CODE_PLEASE_REPORT: ORDER BY的表达式#1包含聚合函数并适用于 非聚合查询的结果。
有什么想法吗?
答案 0 :(得分:3)
这可能需要一些调整,因为我不知道你的模型,但我建议你尝试以下方法:
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”时,我指的是数据库表中列的名称。它们可能相同或不同,所以请随意调整它。
答案 1 :(得分:1)
你必须这样做
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 / await
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']]}))
})