在 knexjs mysql 中取联合多列后总和不起作用

Posted

技术标签:

【中文标题】在 knexjs mysql 中取联合多列后总和不起作用【英文标题】:sum is not working after taking union multiple column in knexjs mysql 【发布时间】:2018-10-26 18:15:40 【问题描述】:

我需要 4 列的总和,我这样做是先取 union 然后运行 ​​sum

  db.select("gen-acute-sales-before-returns").table('sales')
  .union(function() 
    this.select("gen-acute-sales-after-returns").table('sales')
  )
  .union(function()
    this.select("gen-chronic-sales-before-returns").table('sales')
  )
  .union(function()
    this.select("gen-chronic-sales-after-returns").table('sales')
  )
  .sum(totalSales:"gen-acute-sales-before-returns")
  .then(result => res.json(result))

问题是我得到了一个联合表,但 sum 不起作用

【问题讨论】:

请定义“总和不起作用”。当前结果和预期结果将是一个良好的开端。 你为什么首先使用UNION?选择gen-acute-sales-after-returns + gen-chronic-sales-before-returns + gen-chronic-sales-after-returns 并返回总和。 【参考方案1】:

我只是在这里添加一般的 knex 调试指南,因为这个问题很模糊。

通过为查询生成器调用.toSQL() 查看生成的查询。然后可以查看生成的查询是否有问题。

console.log(
  db.select("gen-acute-sales-before-returns").table('sales')
  .union(function() 
    this.select("gen-acute-sales-after-returns").table('sales')
  )
  .union(function()
    this.select("gen-chronic-sales-before-returns").table('sales')
  )
  .union(function()
    this.select("gen-chronic-sales-after-returns").table('sales')
  )
  .sum(totalSales:"gen-acute-sales-before-returns").toSQL().sql
);

knex 的 union 方法完全有可能存在 bug(不会是第一次)。

【讨论】:

以上是关于在 knexjs mysql 中取联合多列后总和不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 多列总和脚本

MySQL:在一列中选择多列和总和

使用计数联合或使用总和连接 - MySQL

day39---mysql基础三

MySQL 索引详解

Mysql-索引类型篇