将多个字段的sequelize group结果转换为sequelize错误

问题描述 投票:0回答:1

我的查询如下所示:

 db.test.findAll({
            group: ['source'],
            attributes: ['source','source_id', [Sequelize.fn('COUNT', 'source'), 'count']],
            order: [[Sequelize.literal('count'), 'DESC']],
            raw: true
        }).then((sources) => {
            console.log('source is ' + sources);
        }).catch((err) => {
            console.log('error i is ' + err);
        })

test.js

module.exports = function (sequelize, DataTypes) {
    const test = sequelize.define('test', {
        id: {primaryKey: true, type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, unique: true},
        source: {type: DataTypes.STRING, allowNull: false},
        source_id: {type: DataTypes.STRING, allowNull: false},

    });

    return test
};

一旦我运行此查询,它就会给我这个错误:

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.test.source_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

node.js sequelize.js
1个回答
2
投票

尝试在group by子句中也使用source_id。因为在这里,SQL会混淆从多个中选择哪个source_id。你有groupBy源,所以它会选择但是souce_id仍然是模棱两可的

 db.test.findAll({
                group: ['source', 'source_id'],
                attributes: ['source','source_id', [Sequelize.fn('COUNT', 'source'), 'count']],
                order: [[Sequelize.literal('count'), 'DESC']],
                raw: true
            }).then((sources) => {
                console.log('source is ' + sources);
            }).catch((err) => {
                console.log('error i is ' + err);
            })
© www.soinside.com 2019 - 2024. All rights reserved.