首页 > 解决方案 > Knex - knex 和 mysql 工作台之间的 SUM 查询结果返回不同的值

问题描述

我目前在对字段求和时面临这个问题。我正在使用 Knex 和 Mysql。

使用 Knex 时,我得到 LastYr 列的这个结果。

克尼克斯结果:

Knex 结果

但是在 Mysql Workbench 中做同样的查询,我得到了这个(这就是我想要的)

Mysql 工作台:

Mysql 工作台

我的查询是这样的:

SELECT t1.*, IFNULL(t2.TotalUnits,0) AS TotalUnits, ROUND(IFNULL(t2.totalRevenue,0),0) AS TotalRevenue FROM (SELECT BranchDept, ForPeriod, SUM(SysGen) AS Gen, SUM(UserInput) as Live, SUM(PrevYear) AS LastYr, SUM(SysGen) - SUM(UserInput) AS Input FROM tbl_demand_forecast_details WHERE BranchDept='" + req.body.branchdept + "' AND ForPeriod >= '" + fystart + "' " +
        "AND ForPeriod <= '" + fyend + "' GROUP BY BranchDept, ForPeriod " +
        "ORDER BY ForPeriod) AS t1 " +
        "LEFT OUTER JOIN " +
        "(SELECT BranchDept, AsOfPeriod, SUM(UnitSales) AS totalUnits, SUM(PesoSales) AS totalRevenue FROM tbl_sales_history " + 
        "WHERE BranchDept='" + req.body.branchdept + "' AND AsOfPeriod >= '" + fystart + "' AND AsOfPeriod <= '" + fyend + "' GROUP BY AsOfPeriod) AS t2 " +
        "ON t1.BranchDept = t2.BranchDept AND t1.ForPeriod = t2.AsOfPeriod

似乎 knex 正在将上一个值添加到 LastYr 列中的下一个值。我用 knex.raw 和 knex 方法尝试了这个,但我仍然得到错误的值。

在过去的两天里,这让我发疯了。有人指出我正确的方向吗?

标签: javascriptmysql

解决方案


好的。我终于明白了。

当求和的列上有空值时,SUM 查询会出现问题。用零替换那些解决了这个问题。


推荐阅读