如何使用多个值对多个列求和

时间:2013-08-05 06:45:16

标签: mysql sql mysql5

我正在寻找以下解决方案:

  1. 转到users表,找到在网站上列出项目的用户。在此用户表中,没有关于拍卖的列。相反,它连接到带有密钥的帐户表(在帐户中,此列称为用户)

  2. 从这些ID(已列出拍卖物品的用户)中,我需要找到他们的帐户余额。这也在帐户表中。余额包含在名为operation_amount的列中。我还有另一个名为operation_type的列,它描述用户是否具有正余额或负余额。例如,如果operation_type = 1,则他的余额为负,而如果operation_type = 2,则他的余额为正。

  3. 现在我有另一个名为tmpinvoice的表,其中有一个名为amount的列。这显示了用户需要向网站管理员支付多少费用。

    鉴于此,我需要计算他必须支付多少钱。例如,如果用户的余额为200美元,我需要根据operation_type检查其是否为正数。

    所以我有查询在哪里只做记录

    SELECT u.id AS id_user, u.nick,
      CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount
                             WHEN 2 THEN ac.operation_amount + tm.amount
                                    ELSE 'N/A' END AS `fee`                         
    FROM auctionbg_search.accounts AS ac    
        LEFT JOIN auctionbg_search.users AS u ON TRUE
            AND u.id = ac.user
        LEFT JOIN auctionbg_search.auctions AS a ON TRUE
            AND a.id = ac.auction
        LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE    
    WHERE TRUE
      AND tm.amount = ac.operation_amount
    

    这是我收到的结果

    http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a

    是,但这只计算了列中1个值的'费用',如果用户有多个值

    ,该怎么办?

    喜欢这个用户:

    http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd

    我需要从该给定用户的operation_amount计算总金额,并从该总金额中删除tmpinvoice

    我的一位朋友告诉我使用

    IF(SUM(ac.operation_amount), IS NULL , 0, sum(ac.operation_amount) 
    

    并使用+和 -

    加入2个时间帐户(表格)

    加入1次+,2次加入 -

    但我无法弄清楚将会如何看待:)

1 个答案:

答案 0 :(得分:2)

在SUM函数中使用CASE表达式。

   SELECT u.id AS id_user, u.nick,
     SUM(CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount У
                                WHEN 2 THEN ac.operation_amount + tm.amount
                                       ELSE 'N/A' END) AS `fee`
    FROM auctionbg_search.accounts AS ac
      LEFT JOIN auctionbg_search.users AS u ON TRUE AND u.id = ac.user 
      LEFT JOIN auctionbg_search.auctions AS a ON TRUE AND a.id = ac.auction
      LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE  
    WHERE TRUE AND tm.amount = ac.operation_amount
    GROUP BY u.id, u.nick       

请参阅SQLFiddle

上的演示