我正在尝试在Knex.js中重写一些MySQL查询,并且感觉到我动every动.raw
,这与我首先要使用Knex的原因背道而驰。
是否可以使用.raw
编写以下查询 ?
SELECT
product,
SUM(revenue)
FROM orders
使用raw可以编写:
knex()
.select(
'product',
knex.raw('SUM(revenue)')
)
.from('orders')
但是使用Knex的想法是避免使用MySQL查询字符串,因此我希望有另一种方法。还是每个人都只在各处使用.raw
,而我误会了什么?很有可能,我对此并不陌生。
答案 0 :(得分:1)
您可以使用sum
方法。
sum — .sum(column | columns | raw)检索a的值之和 给定的列或列的数组(请注意,某些驱动程序不 支持多列)。还接受原始表达式。
knex('users').sum('products') Outputs: select sum("products") from "users"
可能是这样的:
knex()
.select('product')
.sum('revenue')
.from('orders')
您应根据具体情况进行调整。您可能需要使用类似groupBy('product')
的方法来获得每种产品的总收入。
您真的应该翻遍knex的documentation,它非常好而且直截了当,并且您绝对不应该一直使用raw。
答案 1 :(得分:0)
您甚至可以这样指定返回的总和列名称:
knex(tableName)
.select('product')
.sum({ total: 'revenue' })
.groupBy('product');