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
] - 即所有之前Taka的总和,直到给定的Year_Month。按om.ID分组
现在,它显示了第一个Year_Month的'Taka'(例如,如果我想看到'taka'的行军和总和('Taka')直到3月,它显示我1月的'Taka'(第一个进入yyyy_mm表)不是为了游行。但显示总和('Taka')正是我想要看到的)而不是我提供的那个。但总和(塔卡)直到给定的YearMonth。!
但它在昨天之前显示完全相同的结果!但是我没有改变任何东西,我现在不知道它为什么显示不同......
任何人都可以帮助我!
答案 0 :(得分: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
我没有测试过此查询,因此可能会出现语法错误。
答案 1 :(得分:1)
我不认为这个SQL会编译。查看您的GROUP BY
声明,您应该GROUP BY
您选择的字段:
GROUP BY ex.ID, ex.ExpenseName , om.Taka
另外,我认为您不打算在同一个字段上使用SUM运算符和GROUP BY运算符。不知道还有什么可能发生。
答案 2 :(得分:1)
您的查询在运行时会得到不同的结果,因为您的选择字段(om.taka
)是在组函数(sum(om.taka)
)中使用的字段。这就是我的意思。假设你有这个:
mysql> select * from foo; +------+------+ | a | b | +------+------+ | 1 | 2 | | 1 | 3 | +------+------+
如果使用组函数中的字段进行选择,则可以得到:
取决于mysql如何决定行的顺序的顺序。具体来说,请看:
mysql> select a, b, sum(b) from foo group by a; +------+------+--------+ | a | b | sum(b) | +------+------+--------+ | 1 | 2 | 5 | +------+------+--------+ 1 row in set (0.01 sec)
但这是因为处理行的顺序。如果订单被颠倒了,那么你会得到不同的结果。
mysql> select a, b, sum(b) from (select * from foo order by b asc) t group by a; +------+------+--------+ | a | b | sum(b) | +------+------+--------+ | 1 | 2 | 5 | +------+------+--------+ 1 row in set (0.00 sec) mysql> select a, b, sum(b) from (select * from foo order by b desc) t group by a; +------+------+--------+ | a | b | sum(b) | +------+------+--------+ | 1 | 3 | 5 | +------+------+--------+ 1 row in set (0.01 sec) mysql>
本课程是,如果您选择在群组功能中使用的字段,您将获得任意结果。