我有一个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;
不太确定如何构建此查询以获得与sequelize相同的结果。
答案 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)
也许试试这个(我假设您已经关联了Picks
和Users
),并且您可以通过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: [''],
});