如何为Sequelize转换SQL查询?

时间:2017-12-19 00:42:10

标签: sql node.js sequelize.js

我有一个SQL查询(使用mysql作为DB),我现在需要在node.js中重写为sequelize.js查询。

SQL查询

SELECT p.UserID, SUM(p.score), u.username
FROM Picks p
LEFT JOIN Users u
ON p.UserId = u.id
GROUP BY p.UserId;

不太确定如何构建此查询以获得与sequ​​elize相同的结果。

3 个答案:

答案 0 :(得分:1)

这应该做你需要的:

db.Pick.findAll({
  attributes: [
    'UserID',
    [db.sequelize.fn('SUM', db.sequelize.col('score')), 'score']
  ],
  include: [{
    model: db.User,
    required: true,
    attributes: ['username']
  }],
  group: ['UserID']
}).then((results) => {
  ...
})

答案 1 :(得分:0)

也许试试这个(我假设您已经关联了PicksUsers),并且您可以通过pick.user.username访问user.name:

Picks.findAll({
    attributes: ['UserID', [sequelize.fn('SUM', 'score'), 'sumScore']]
    groupBy: ['UserID']
    include: [
        model: Users
    ]
});

答案 2 :(得分:0)

我知道这个问题很旧,但是这个答案可能会对其他人有所帮助。 我找到了一个在线转换器,可以将原始SQL转换为Sequelize。

链接为https://pontaku-tools.com/english/

从该网站转换后,我收到以下答复。

Picks.hasMany(Users,{foreignKey: '', as: 'u'});

var _q = Picks;
_q.findAll({
include: [{model: Users, as: 'u', required: false,}, ],
attributes: [[sequelize.fn('SUM', sequelize.col('p.score')), 'p.score'],['p.UserID', 'p.UserID'],['u.username', 'u.username']],
group: [''],
});