【问题标题】:mysql get difference of two sum on the same tablemysql在同一张表上获得两个总和的差
【发布时间】:2012-12-31 03:19:45
【问题描述】:

我怎样才能在一个查询而不是这个查询中得到结果:

SELECT SUM(`quantity`) as type0 FROM `fruits_delivery` 
    WHERE `fid`='1001' AND `type`=0;

结果_1 = type0 ;

SELECT SUM(`quantity`) as type1 FROM `fruits_delivery`  
    WHERE `fid`='1001' AND `type`=1;

结果_2 = type1 ;

final_result = result_1 - result_2;

【问题讨论】:

    标签: mysql sql sum


    【解决方案1】:

    你应该使用这个

    SELECT sum(IF(`type`=0, `quantity`, 0))-sum(IF(`type`=1, `quantity`, 0)) 
            AS    `final_result` 
            FROM   `fruits_delivery` 
            WHERE  `fid` = '1001' 
                   
    

    sqlfiddle


    旧答案

    SELECT T1.result - T2.result AS `final_result` 
    FROM   (SELECT Sum(`quantity`) AS result, 
                   `fid` 
            FROM   `fruits_delivery` 
            WHERE  `fid` = '1001' 
                   AND `type` = 0 
            LIMIT  1) AS T1 
           JOIN (SELECT Sum(`quantity`) AS result, 
                        `fid` 
                 FROM   `fruits_delivery` 
                 WHERE  `fid` = '1001' 
                        AND `type` = 1 
                 LIMIT  1) AS T2 
             ON ( T1.fid = T2.fid ) 
    

    SQLFiddle

    【讨论】:

    • 嗨,感谢您的回复,但我收到 #1054 - Unknown column 'T1.result' in 'field list' 错误..
    • @alisongaleon,是的。 SQL格式化程序改变了它。我已经更新了。再试一次
    • 这可以简单地使用CASE 来完成,而不是使用两个子查询并加入它们。
    • 谢谢@JW。我添加了一个更短更合适的IF 版本。
    【解决方案2】:

    或者,你也可以使用CASE

    SELECT  SUM(CASE WHEN type = 0 THEN quantity ELSE 0 END) -
            SUM(CASE WHEN type = 1 THEN quantity ELSE 0 END)
              AS final_result
    FROM    fruits_delivery
    WHERE   fid = '1001'
    

    【讨论】:

    • +1。在接受的答案进行更新之前先回答较短的版本!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多