如何对具有多个值的多列求和

  • 本文关键字:求和 mysql sql mysql5
  • 更新时间 :
  • 英文 :


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

  1. 进入"用户"表,查找已在网站上列出项目的用户。在这个用户表中,没有关于拍卖的列。相反,它连接到一个带有关键字的accounts表(在accounts中,此列被称为user)

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

现在我有了另一个名为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次加入-

但我不知道会是什么样子:)

在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 上的演示

相关内容

  • 没有找到相关文章

最新更新