在不使用.raw的情况下在Knex.js中选择总和

时间:2019-07-01 15:36:14

标签: mysql knex.js

我正在尝试在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,而我误会了什么?很有可能,我对此并不陌生。

2 个答案:

答案 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');