我正在使用 Sequelize.JS 连接到 MySQL 数据库。我有以下表结构:
products
---------------------
id INT
name VARCHAR
price DECIMAL
price_special DECIMAL
我想获得最低的价格
(或special_price
,如果可用)和最高的价格
(或special_price
可用时)。使用原始 SQL,我可以执行以下操作:
SELECT
MIN(IF(`price_special` > 0, `price_special`, `price`)) AS `min`,
MAX(IF(`price_special` > 0, `price_special`, `price`)) as `max`
FROM
`products`
;
我也知道我可以在 Sequelize 中选择一个由 SQL 函数包装的列,这样:
product.findOne({
attributes: [
[ Sequelize.fn('MIN', Sequelize.col('price')), 'min' ],
[ Sequelize.fn('MAX', Sequelize.col('price')), 'max' ],
]
});
但是,我不知道如何嵌套 MIN
和 IF
函数,这是我处理原始 SQL 的方式。
最佳答案
在发布我的问题后,我发现了一个 issue in GitHub有类似的问题。
我得到的解决方案如下:
product.findOne({
attributes: [
[ Sequelize.fn('MIN', Sequelize.fn('IF',
Sequelize.literal('`price_special` > 0'),
Sequelize.col('price_special'),
Sequelize.col('price'))), 'min' ],
[ Sequelize.fn('MAX', Sequelize.fn('IF',
Sequelize.literal('`price_special` > 0'),
Sequelize.col('price_special'),
Sequelize.col('price'))), 'max' ],
]
});
我个人不喜欢 Sequelize.literal
调用,但它正在运行,我不知道如何改进它。
关于javascript - 如何在 sequelize.js 中嵌套 SQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948129/