2
    SELECT ex.`ID`, ex.`ExpenseName`, om.`Taka`, SUM( om.`Taka` ) AS 'Total Taka' 
    FROM (office_expense_main om) 
        JOIN (office_expenses ex) 
               ON (ex.ID=om.OfficeExpenseID) 
        JOIN (yyyy_mm_officeexpense ym) 
               ON ( ym.Year_Month = '" + _yearMonth + "' AND om.YearMonthID <= ym.ID ) 
    GROUP BY om.`OfficeExpenseID`

此查询应显示 [om. Taka] 的给定 [ym.Year_Month] 和 sum[om. Taka] - 直到给定的 Year_Month 之前的所有 Taka 的总和。按 om.ID 分组

现在,它显示第一个 Year_Month 的“Taka”(例如,如果我想看到 March 的“taka”和 sum('Taka') 直到 3 月,它会显示 1 月的“Taka”(yyyy_mm 表中的第一个条目)不是为了三月。但显示总和('Taka')正是我想看到的)而不是我提供的那个。但是 sum(Taka) 直到给定的 YearMonth。!

但它显示了与昨天完全相同的结果!但我没有改变任何东西,我不明白为什么它现在显示不同..

有谁能够帮助我!

4

3 回答 3

2

由于 MySQL 中称为隐藏列的(错误)功能,您的查询失败。列名 om.Taka 不是聚合列,因此 MySQL 返回任意值。好吧,通常它是您看到的第一个值,但这不能保证。

您需要重新加入 office_expense_main 表。我认为以下可能是您想要的:

SELECT ex.id, ex.`ExpenseName`, omlatest.om.taka, SUM( om.`Taka` ) AS 'Total Taka' 
FROM office_expense_main om JOIN
     office_expenses ex
     ON ex.ID = om.OfficeExpenseID JOIN
     yyyy_mm_officeexpense ym
     ON ym.Year_Month = '" + _yearMonth + "' AND om.YearMonthID <= ym.ID join
     office_expenses omlatest
     on om.YearMonthId = ym.id and exiID = omlatest.OfficeExpenseId
GROUP BY ex.id

我没有测试过这个查询,所以它可能有语法错误。

于 2013-01-11T20:28:09.653 回答
1

我认为这个 SQL 不会编译。查看您的GROUP BY陈述,您应该GROUP BY选择的字段:

GROUP BY ex.ID, ex.ExpenseName , om.Taka

另外,我不认为您打算在同一字段上使用 SUM 运算符和 GROUP BY 运算符。不知道还会发生什么。

于 2013-01-11T19:44:27.797 回答
1

您的查询在运行时会得到不同的结果,因为您的选择字段 ( om.taka) 是在组函数 ( sum(om.taka)) 中使用的字段。这就是我的意思。假设你有这个:

mysql> 从 foo 中选择 *;
+------+------+
| 一个 | 乙 |
+------+------+
| 1 | 2 |
| 1 | 3 |
+------+------+

如果您使用 group 函数中的字段进行选择,则可以得到:

取决于mysql如何决定行的顺序。具体来说,看这个:

mysql> select a, b, sum(b) from foo group by a;
+--------+------+--------+
| 一个 | 乙 | 总和(b) |
+--------+------+--------+
| 1 | 2 | 5 |
+--------+------+--------+
一组中的 1 行(0.01 秒)

但这是因为处理行的顺序。如果顺序颠倒,那么你会得到不同的结果。

mysql> select a, b, sum(b) from (select * from foo order by b asc) t group by a;
+--------+------+--------+
| 一个 | 乙 | 总和(b) |
+--------+------+--------+
| 1 | 2 | 5 |
+--------+------+--------+
一组中的 1 行(0.00 秒)

mysql> select a, b, sum(b) from (select * from foo order by b desc) t group by a;
+--------+------+--------+
| 一个 | 乙 | 总和(b) |
+--------+------+--------+
| 1 | 3 | 5 |
+--------+------+--------+
一组中的 1 行(0.01 秒)

mysql>

教训是,如果您选择在组函数中使用的字段,您将获得任意结果。

于 2013-01-11T20:26:24.347 回答