我有 2 个使用 sequelize 的表,如下所示
sequelize.define("campaign",{ id:{ type:Sequelize.INTEGER, autoIncrement:true, primaryKey:true, allowNull:false }, title:{ type:Sequelize.STRING }, description:{ type:Sequelize.STRING }, targetamount:{ type:Sequelize.INTEGER }, startdate:{ type:Sequelize.DATE }, enddate:{ type:Sequelize.DATE } }); sequelize.define("transaction",{ id:{ type:Sequelize.INTEGER, autoIncrement:true, primaryKey:true, allowNull:false }, date:{ type:Sequelize.DATE }, amount:{ type:Sequelize.INTEGER }, notes:{ type:Sequelize.STRING } });
和与活动关联的表事务为
db.Transactions.belongsTo(db.Campaigns); db.Campaigns.hasMany(db.Transactions,{as:"campaign"});
现在,我正在尝试使用以下代码从交易中收集的金额总和来获取所有广告系列
const pageSize = 10000; const offset = 0; Transactions.findAndCountAll({ attributes: [[Sequelize.fn('sum', Sequelize.col('amount')), 'total']], group:['campaignId'], limit:pageSize, offset:offset }).then(async (data)=>{ /// });
但这给出了错误,
RequestError:列“transactions.id”在 ORDER BY 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
默认情况下,似乎续集返回“id”列。我该如何解决这个问题?
所以在后台生成的 SQL 是无效的。
之所以应用顺序,是因为您要求limit和offset(通常用于分页),这要求排序是确定性的。
limit
offset
为了减轻这种情况,您可以:
ORDER BY
campaignId
total
大概是这样的吧?
const pageSize = 10000; const offset = 0; Transactions.findAndCountAll({ attributes: [[Sequelize.fn('sum', Sequelize.col('amount')), 'total']], group:['campaignId'], limit:pageSize, offset:offset, order: ['campaignId'] })