2013-08-05 53 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