Mysql 如何发送查询?
如果我发送以下查询:Mysql 如何发送查询?,mysql,sql,Mysql,Sql,如果我发送以下查询: SELECT * FROM ( SELECT COUNT(*) as total, SUM(ABS(AMOUNT)) AS Total_Amount FROM success_log WHERE TRANSACTION = 'success' ) t1 CROSS JOIN ( SELECT COUNT(*) as success_total, SUM((AMOUNT)) AS success_Amount FROM
SELECT * FROM (
SELECT COUNT(*) as total, SUM(ABS(AMOUNT)) AS Total_Amount
FROM success_log
WHERE TRANSACTION = 'success' ) t1
CROSS JOIN (
SELECT COUNT(*) as success_total, SUM((AMOUNT)) AS success_Amount
FROM success_log WHERE
TRANSACTION = 'success' ) t2
CROSS JOIN (
SELECT COUNT(*) as Fail_total, SUM(ABS(AMOUNT)) AS Fail_Amount
FROM success_log
WHERE TRANSACTION = 'cancle') t3
结果:
但我想要结果:
如何发送查询
模式是
您必须删除总额计算选择查询中的Where条件 希望这对你有帮助
SELECT
total,Total_Amount,success_total,success_Amount,Fail_total,Fail_Amount
FROM
(
SELECT
COUNT() as total
, SUM(ABS(AMOUNT)) AS Total_Amount
FROM
success_log
) t1
CROSS JOIN (
SELECT
COUNT() as success_total
, SUM((AMOUNT)) AS success_Amount
FROM
success_log
WHERE
TRANSACTION = 'success'
) t2
CROSS JOIN (
SELECT
COUNT(*) as Fail_total
, SUM(ABS(AMOUNT)) AS Fail_Amount
FROM
success_log
WHERE
TRANSACTION = 'cancel'
) t3
以下方面应起作用:
SELECT total,
Total_amount,
(total - Fail_total) AS success_total,
(Total_amount - Fail_amount) AS success_Amount,
Fail_total,
Fail_amount
FROM (
SELECT COUNT(*) as total,
SUM(ABS(AMOUNT)) AS Total_Amount
FROM success_log
WHERE TRANSACTION = 'success'
) t1
CROSS JOIN (
SELECT COUNT(*) as Fail_total,
SUM(ABS(AMOUNT)) AS Fail_Amount
FROM success_log
WHERE TRANSACTION = 'cancle'
) t3
只是为了解释一下,您的第二个交叉联接t2没有返回正确的结果,因此我使用t1和t3的原始列,并通过减去它们的差值来添加另外两列,以显示成功总数和金额。如何计算
success\u金额
3013?请提供架构和示例数据。是成功金额是总额-错误金额和成功总额是总额-失败总额我建议使用选择交易,计数(*)作为计数,按交易顺序按交易从成功日志组中求和(ABS(金额))作为总额,然后使用应用程序代码正确显示列。在您的问题中,total和success_total来自同一个查询,因此它们当然会有相同的结果。为什么在某些查询中使用ABS(amount)
,而在其他查询中只使用amount
?为什么将amount
存储为VARCHAR
而不是INT
?不要只发布代码。解释什么地方出了问题,以及你是如何解决的。并使代码可读。