node.js - 努力在 Node js 中使用 Knex 编写一个 SELECT 查询来进行计算
问题描述
我正在使用 PostgresQL,并且能够运行以下语句:
SELECT id, code, supplier, item, price, price * stockonhand AS stockvalue, stockonhand - stockprocessed AS stockleft FROM products;
这适用于 PostgresQL 并返回我选择的所有列以及新计算的列“stockvalue”和“stockleft”。
id | code | supplier | item | price | stockvalue | stockleft
------+-------+----------+---------+-------+------------+-----------
1002 | 15202 | EVADAM | CHZIP-X | 48.24 | 39074.4000 | 670.00
1001 | 15201 | EVADAM | ZIP-X | 42.38 | 50856.0000 | 1050.00
2 | 15204 | EVADAM | LCC-X | 33.45 | 40140.0000 | 1200.00
4 | 15203 | EVADAM | LCC-X | 33.45 | 40140.0000 | 1200.00
5 | 15205 | EVADAM | LOC-X | 36.45 | 36450.0000 | 1000.00
现在我的问题是如何转换以下代码,使其包含使用 Knex 进行的上述计算?
const handleGetProducts = (req, res, db) => {
db.select('id', 'supplier', 'code', 'item', 'description', 'price', 'stockonhand', 'stockprocessed').table('products')
.then(products => {
if (products.length) {
res.json(products)
console.log(products)
} else {
res.status(400).json('not found')
}
})
.catch(err => res.status(400).json('error getting products'))
}
module.exports = {
handleProducts: handleGetProducts
};
我到处搜索,但找不到任何对我的情况有帮助的东西。
谢谢
解决方案
一种方法是使用raw()。我相信这或多或少与您要获取的查询相匹配:
knex.select('id', 'supplier', 'code', 'item', 'price', knex.raw('"price" * "stockonhand" as "stockvalue"'), knex.raw('"stockonhand" - "stockprocessed" as "stockleft"')).table('products')
结果如下:
select "id", "supplier", "code", "item", "price", "price" * "stockonhand" as "stockvalue", "stockonhand" - "stockprocessed" as "stockleft" from "products"
您可以在此处修改 postgres 的精确表达式:QueryLab
推荐阅读
- php - 当我使用 Kartik Editable Widget 时出现错误 - Uncaught TypeError: elem.replace is not a function
- c# - 如何将数据附加到现有的 Excel 文件?
- powershell - 将长字符串从 powershell 表达式传递到 cmd 的问题
- mysql - MYSQL加入三张表有异常
- python - 修改返回错误输出的数组
- c# - 如何在 ASP.NET MVC 中使用 Autofac 或 Unity 实现简单工厂?
- sql - 关于查找率小于 9 和星名的 Sql
- python - Python Pandas Matplotlib:如何在没有数字的情况下绘制图形?
- tableau-api - 如何在最终表产生单个数据观察的一系列表上创建过滤器?
- javascript - 如何让JS在缓存中存储随机元素?