упорядочить совокупную группу, не работая так, как я хочу

#mysql #node.js #express #sequelize.js #sequelize-typescript

Вопрос:

Я хочу получить информацию о голосах с отношениями в группе в соответствии с аудиоидом, но мой код работает не так, как предполагалось. 'user. id' разбейте группу и покажите один за другим голоса.

в чем проблема с моим кодом? и как группироваться только с аудиоидом, а также извлекать связанные данные

   try {
        const votes = await globalVotes.findAll({
            group: ['audioId', 'mediaType', 'audio.id', 'user.id'],

            attributes: [
                'audioId',
                'mediaType',
                [Sequelize.fn('SUM', Sequelize.col('totalVote')), 'total_vote'],
                [Sequelize.fn('MAX', Sequelize.col('voterEmail')), 'latest_email'],
                [Sequelize.fn('COUNT', Sequelize.col('voteCount')), 'total_vote_count'],
                [Sequelize.fn('MAX', Sequelize.col('vottingNum')), 'latest_number'],
                [Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user'],
                [
                    Sequelize.fn('MAX', Sequelize.col('globalVotes.updatedAt')),
                    'latest_time',
                ],
            ],
            include: [
                {
                    model: Audio,
                    attributes: ['aTitle', 'aImage', 'audioFolderId'],
                    include: [
                        {
                            model: AudioFolder,
                            attributes: ['folderName'],
                        },
                    ],
                    group: ['audioFolderId.id'],
                },
                {
                    model: User,
                    attributes: ['fullName'],
                },
            ],

            order: [[Sequelize.fn('SUM', Sequelize.col('totalVote')), 'DESC']],
            raw: true,
            nest: true,
        });
        console.log(votes);
        res.status(200).render('admin/chart/audio/index', {
            title: 'Manage Audio Votes',
            votes,
        });
 

надеюсь, я получу какую-нибудь информацию,

Комментарии:

1. Вы пытаетесь сгруппироваться по идентификатору пользователя и в то же время получить агрегацию с ним Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user' . Удалите любой из них, чтобы запрос был более последовательным.

2. И, конечно, Sequelize не так подходит для сложных агрегаций, это больше связано с операциями CRUD и ассоциациями загрузки.

3. @Анатолий, тогда каково решение ?

4. Вы должны выбрать, хотите ли вы рассчитать Sequelize.fn('MAX', Sequelize.col('globalVotes.user_Id')), 'latest_user' или сгруппировать по user.id