在模型中两列之间的续集

时间:2016-10-09 17:42:44

标签: sequelize.js

如何使用sequelize创建这样的查询?

SELECT name, region, SUM(((COALESCE(base_income, 0) + COALESCE(user_taxes, 0))) AS total_sal FROM user GROUP BY name, region;

3 个答案:

答案 0 :(得分:4)

好的,以下是上面RAW sql查询的解决方案。

  user.findAll({
  attributes: ['name', 'region', [sequelize.fn('SUM', (sequelize.fn('COALESCE', (sequelize.col('base_income')), 0), sequelize.literal('+'), sequelize.fn('COALESCE', (sequelize.col('user_taxes')), 0))), 'total_sal']],
  group: ['name', 'name']})

我们必须使用sequelize.literal来在查询之间放置任何运算符。希望这会有所帮助。

答案 1 :(得分:1)

虽然这是一个老帖子,但我现在跑了两次。所以我想分享我的解决方案:

user.findAll({ 
  attributes: [ 'name', 'region',
    [ sequelize.literal(
        'COALESCE(base_income, 0) + COALESCE(user_taxes, 0)'
      ), 'total_sal'
    ]
  ],
  group: ['name', 'name']
})

答案 2 :(得分:0)

尽管在the documentation中找不到用作属性的内容。 sequelize.where函数可能是一个很好的解决方案,因为它允许在模型中的关联情况下使用sequelize.col

User.findAll({
  attributes: [
    'name',
    'region',
    [
      Sequelize.fn(
        'SUM',
        Sequelize.where(Sequelize.col('base_income'), '+', Sequelize.col('user_taxes'))
      ),
      'total_sal',
    ],
  ],
  group: ['name', 'region'],
})