Select Knex.js 中的总和而不使用 .raw

Select a sum in Knex.js without using .raw

我正在尝试重写 Knex.js 中的一些 MySQL 查询,我觉得我每次 运行 变成 .raw,这感觉与我首先要使用 Knex 的原因。

是否可以使用 .raw 编写以下查询 而无需

SELECT
   product,
   SUM(revenue)
FROM orders

使用raw,可以写成:

knex()
   .select(
      'product',
      knex.raw('SUM(revenue)')
   )
   .from('orders')

但使用 Knex 的想法是避免使用 MySQL 查询字符串,所以我希望有另一种方法。还是每个人都只是到处使用 .raw,而我误会了什么?很有可能,我是新手。

您可以使用sum方法。

sum — .sum(column|columns|raw) Retrieve the sum of the values of a given column or array of columns (note that some drivers do not support multiple columns). Also accepts raw expressions.

knex('users').sum('products')
Outputs:
select sum("products") from "users"

大概是这样的:

knex()
   .select('product')
   .sum('revenue')
   .from('orders')

您应该根据自己的具体情况进行调整。您可能需要使用类似 groupBy('product') 的方法来获取每件产品的总收入。

你真的应该复习一下 knex 的 documentation,它非常好而且简单明了,你绝对不应该一直使用 raw。

您甚至可以像这样指定返回的总和列名称:

knex(tableName)
 .select('product')
 .sum({ total: 'revenue' })
 .groupBy('product');