我有一个查询运行正常,但没有创建所需的结果,我希望此查询通过取第二个总和的差值在表的第三列中插入值 (PAYABLE_AMOUNT_DUE
)列 (PAYABLE_AMOUNT
) 基于其 ACTION 字符串 (PAYABLE_ACTION
)。我的表格结构和值如下所示,
我使用的逻辑如下,但它不会将所需的值插入到第三个表中(可以看到它始终为0)
查询
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
和 payable_action
中插入了值,但不在 payable_amount_due
中插入了值,我不知道为什么以及如何插入我做吗?谢谢
最佳答案
你可以尝试:
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')
返回 bool 值,但mysql只有0或1的 bool 值,所以我们将添加payable_action * 1
总和code> 对于满足操作条件的行,payable_action * 0
对于其他行。所以基本上只有那些采取适当行动的人才算数。
关于mysql - 通过计算sql中其他列的SUM差值将值插入到第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17152550/