2014-09-24 65 views
1

我想在MySQL中使用聚合函数来返回一个帐户的余额。但是,我一直在收到一个错误,它让我疯狂!MySQL'命令不同步'错误时汇总减法

SELECT cast(sum((number_sold - number_bought) * price) as unsigned) as 'Balance' 
    FROM transactions 

这将返回:

#2014 - Commands out of sync; you can't run this command now 

下面是一个SQLfiddle:http://sqlfiddle.com/#!2/26297/1

任何帮助表示赞赏!

+2

,如果你有剩余的要获取行和尝试不首先关闭先前打开的游标/释放的结果集发出一个新的查询通常发生。此代码必须在其他一些语句的上下文中执行。你能发布更多的上下文吗? – 2014-09-24 20:09:30

+0

谢谢@MichaelBerkowski这是我正在尝试运行的唯一代码... SQL小提琴目前已停用,但会在备份时发布某些内容! – user2761030 2014-09-24 20:13:40

+0

你在应用程序代码(PHP,Ruby,什么)中运行这个?如果是这样,可能会打开一个需要释放的早期结果集。单独的这条SQL语句不会导致2014年的错误。 – 2014-09-24 20:16:35

回答

1

正如Xepoch here提到的,

如果任一左手侧或减法 操作者的右手侧是无符号的,其结果是无符号的为好。您可以通过设置NO_UNSIGNED_SUBTRACTION SQL模式来更改 。

或者,您也可以明确地将您的无符号值转换为 signed bigint值,然后执行减法。

因此,

SELECT (cast(number_sold AS signed) - cast(number_bought AS signed)) * price AS 'Balance' 
FROM transactions