我有一个运行Ok的查询但是没有创建所需的结果,我希望这个查询通过取第二列的SUM({{{{{{{ {1}})基于它的ACTION字符串(PAYABLE_AMOUNT_DUE
)。我的表的结构如下所示,值为
我使用的逻辑如下,但它没有将所需的值插入第三个表(因为它可以看到它始终为0)
查询
PAYABLE_AMOUNT
正如您可以看到它在PAYABLE_ACTION
和INSERT INTO `payables`(`payable_action`, `payable_amount`, `payable_amount_due`)
VALUES ('Cash Closed', '300',
'(SELECT SUM(payable_amount)
FROM payables
WHERE payable_action = 'Cash In') -
(SELECT SUM(payable_amount)
FROM payables
WHERE payable_action = 'Cash Closed')
')
中插入的值,而不是payable_amount
中的值,我不知道为什么以及如何做到这一点?感谢
答案 0 :(得分:1)
您可以尝试:
INSERT INTO payables( payable_action, payable_amount, payable_amount_due )
SELECT 'Cash Closed', '300',
SUM( payable_amount * (payable_action='Cash In' ) )
- SUM( payable_amount * (payable_action='Cash Closed') )
FROM payables
编辑:这条线的作用是什么?
SUM( payable_amount * ( payable_action='Cash In' ) )
对于每一行(payable_action='Cash In')
返回布尔值,但是对于布尔值,mysql只有0或1,因此我们将为满足动作条件的行添加总和payable_action * 1
,为其他行添加payable_action * 0
行。因此,基本上只有那些采取适当行动的人才会计算在内。