首页 文章

无法使用Sequelize libarary加入三个具有Sum聚合函数的表

提问于
浏览
1

我正在尝试加入三个表Organization_entries和users以及user_invoices,我在sql中有这样的查询

select users.id ,users.name,users.email, users.mobile, sum(user_invoices.due_amount) , 
       organization_entries.id, organization_entries.created_at  
from users 
INNER JOIN user_invoices ON users.id = user_invoices.customer_id 
INNER JOIN organization_entries on users.id = organization_entries.user_id 
GROUP BY users.id, organization_entries.id 
ORDER BY organization_entries.created_at DESC;

这个查询工作正常并给我想要的结果,但是当我尝试使用Sequelize libaray转换此查询时,我无法理解如何在sequelize库中转换此查询 .

我在Sequelize尝试了类似的东西

db.users
    .findAll({
      where: condition,
      duplicating: false,
      attributes: [
        'id',
        'name',
        'email',
        'mobile',
        'mobileAlternate',
        'image',
        'gender',
        'dob',
        'status',
        [
          db.sequelize.fn(
            'SUM',
            db.sequelize.col('userInvoices.due_amount')
          ),
          'dueAmount'
        ],
      ],
      include: [
        {
          model: db.userInvoices,
          attributes: ['dueAmount'],
        },
        {
          model: db.organizationEntries,
          attributes: ['id', 'fromDate', 'status', 'createdAt'],
          required: true,
          where: playerCondition,
          duplicating: false
        },

      ],
      group: ['users.id', 'organizationEntries.id'],
      order: [['organizationEntries', 'createdAt', 'DESC']],
      offset: pageCondition.startRecord,
      limit: pageCondition.endRecord
    })

但它给了我这个错误
"Unknown column 'userInvoices.due_amount' in 'field list'",

这是生成的查询

“选择 users . * FROM(SELECT users . idusers . nameusers . emailusers . mobileusers . mobile_alternate AS mobileAlternateusers . imageusers . gender ,SUM( userInvoices . due_amount )AS amountusers . dobusers . status FROM users AS users WHERE( users . deleted_at > '2018-02-27 15:22:30' OR users . deleted_at IS NULL)GROUP BY users . idorganizationEntries . id LIMIT 0,20000)AS users LEFT OUTER JOIN user_invoices AS userInvoices ON users . id = userInvoices . customer_id AND( userInvoices . deleted_at > '2018-02-27 15:22:30'或 userInvoices . deleted_at IS NULL)

任何人都可以给我一些提示如何在Sequelize中写这个查询 .

1 回答

  • 0

    更改

    db.sequelize.col('userInvoices.due_amount')
    

    至 :

    db.sequelize.col('user_invoices.due_amount')
    

相关问题