2013-08-05 55 views
2

我要寻找一个解决以下几点:如何汇总多列多值

  1. 进去用户表,找到谁列出了该网站上的项目的用户。在这个用户表中,没有关于拍卖的列。相反,它被连接到一个带有密钥的帐户表(在帐户中,该列被称为用户)

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

现在我有一个名为tmpinvoice另一个表,其中有一个叫金额栏。这显示了用户需要向网站管理员支付多少费用。

鉴于此,我需要计算他必须支付多少钱。例如,如果用户的余额为$ 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的时间为 -

但我不知道将如何看起来:)

+0

演示中,你正在使用的数据库系统? –

+0

MySQL 5你为什么要问? – ameldur

回答

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

+0

这将计算1中的总列值,我需要为每个用户计算他们的余额不是总额在operation_amount – ameldur

+0

好的。在这种情况下,使用GROUP BY子句。答案更新 –

+0

其给出的一些虚幻结果是结果 示例用户37 http:// gyazo。COM/0bcf64d53d61dc2cb4a615d25ec3d4c8 显示计算费232让看看有operation_amount http://gyazo.com/96fbb0298f47671e38d7d6f9c40476a2 11.6与该用户+所以让我们检查tmpinvoice 在tmpinvoice所以从没有记录http://gyazo.com/0add00022a640ceb0dd864847d6584d9 232在哪里呢? – ameldur