如何按 sequelize.js 中的函数过滤
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;
我正在尝试按函数过滤结果,然后还使用函数列对结果集进行排序。到目前为止,这是我的代码:
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;