[英]How to filter by a function in sequelize.js
我正在嘗試按功能過濾結果,然后使用功能列對結果集進行排序。 到目前為止,這是我的代碼:
db.trip.findAll({
attributes: [
[
db.sequelize.fn('SUM',
db.sequelize.col('departure_time'),
db.sequelize.col('arrival_time')),
'summation'
]
],
where: {
summation: {
gte: 500
}
},
order: [['summation', 'ASC']],
logging: console.log
}).then(function(results) {
});
生成的SQL使得很難重新引用在屬性中創建的別名:
SELECT SUM("departure_time", "arrival_time") AS "summation"
FROM "trip" AS "trip"
WHERE "trip"."summation" >= 500
ORDER BY "trip"."summation" ASC;
關於如何在不使用整個查詢文字的情況下實現此功能的任何想法?
我找到了一種使文字聲明充當別名的方法。 我使用的是Postgres,所以不確定該引用是否適用於其他方言:
var summationAlias = db.sequelize.literal('"summation"');
db.trip.findAll({
attributes: [
[
db.sequelize.fn('SUM',
db.sequelize.col('departure_time'),
db.sequelize.col('arrival_time')),
'summation'
]
],
where: db.sequelize.where(summationAlias, '>=', 500),
order: [[summationAlias, 'ASC']],
logging: console.log
}).then(function(results) {
});
上面的代碼生成以下SQL:
SELECT SUM("departure_time", "arrival_time") AS "summation"
FROM "trip" AS "trip"
WHERE "summation" >= 500
ORDER BY "summation" ASC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.