Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何发送查询?_Mysql_Sql - Fatal编程技术网

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
?不要只发布代码。解释什么地方出了问题,以及你是如何解决的。并使代码可读。