javascript - 如何在 sequelize.js 中嵌套 SQL 函数?

标签 javascript mysql sql sequelize.js

我正在使用 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' ],
    ]
});

但是,我不知道如何嵌套 MINIF 函数,这是我处理原始 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/

相关文章:

某些模式上的 JavaScript Regex 无限循环

javascript - 在 Javascript 中可靠地将标签添加到 <head>

mysql - 使用修剪功能缩小结果集

mysql - 两个程序共享同一个 mysql 数据库 - 每个程序都创建了哪些表?

mysql - SQL - 计算多个表中的引用

SQL按event_types计算2个最新值之间的差异

javascript - 反向循环javascript

javascript - 全日历月份时间格式,如周

java - 如何从 netbeans 远程调试 jar

sql - 搜索自然语言句子结构