2016-01-20 105 views
0

我需要顯示用戶信息和多個總和與他們自己的「指定用戶的交易餘額的」where和group by「限定符。 我需要顯示實際餘額,獎金餘額和總餘額。 用一筆款項很簡單,但我無法用多筆款項來完成。如何整合多個子查詢與總和和分組

這裏是我的查詢與「真正的平衡」:

SELECT v2_user.id, v2_user.username, v2_user.first_name, 
v2_user.last_name,  coalesce(SUM(v2_wallet.amount),0) AS 'Real balance' 
from v2_wallet 
join v2_user 
on v2_wallet.user_id = v2_user.id 
WHERE TYPE NOT LIKE '%BONUS%' 
group by v2_wallet.user_id 

我要2個列添加到我的查詢:

SELECT COALESCE(SUM(v2_wallet.amount),0) AS 'bonus balance' from 
v2_wallet   
WHERE TYPE LIKE '%BONUS%' group by user_id 

SELECT COALESCE(SUM(v2_wallet.amount),0) AS 'total balance' from v2_wallet group by user_id 

回答

0

嵌入的總和,而不是在WHERE子句中的條件,依靠布爾值評估爲0或1的事實。

SELECT v2_user.id, v2_user.username, v2_user.first_name, v2_user.last_name,   
SUM(v2_wallet.amount*(TYPE not like '%BONUS%')) AS 'Real balance', 
SUM(v2_wallet.amount*(TYPE like '%BONUS%')) AS 'Bonus balance', 
SUM(v2_wallet.amount) AS 'Total balance' 
from v2_wallet 
join v2_user 
on v2_wallet.user_id = v2_user.id 
group by v2_wallet.user_id 

如果v2_wallet.amount可能爲NULL,你需要使用上面的COALESCE(v2_wallet.amount,0)。

如果你不喜歡的是,看起來,你可以使用。如果不乘,像

SELECT v2_user.id, v2_user.username, v2_user.first_name, v2_user.last_name,   
SUM(IF(TYPE not like '%BONUS%',v2_wallet.amount*,0)) AS 'Real balance', 
SUM(IF(TYPE like '%BONUS%', v2_wallet.amount, 0)) AS 'Bonus balance', 
SUM(v2_wallet.amount) AS 'Total balance' 
from v2_wallet 
join v2_user 
on v2_wallet.user_id = v2_user.id 
group by v2_wallet.user_id 
+0

謝謝你的時間:我也會測試它 – Asaf

+0

哇,它完美的工作,只給我我需要的行,謝謝你。 – Asaf

+0

很酷。請標記爲答案。 –

1

我還沒有在一段時間做的MySQL。但通常這個代碼應該。這是用SQL服務器sql語法進行測試的。

SELECT U.UserID,U.FirstName,T.TOTAL,B.BONUS 
FROM Users U 
LEFT JOIN (SELECT USERID, COALESCE (SUM(AMOUNT),0) AS TOTAL 
      FROM WALLET 
      GROUP BY USERID) AS T ON U.UserID=T.UserId 
LEFT JOIN (SELECT USERID, COALESCE (SUM(AMOUNT),0) AS BONUS 
      FROM WALLET 
      WHERE TYPE='BONUS' 
      GROUP BY USERID) AS B ON U.USERID=B.USERID 
+0

非常感謝你,它工作但只有一件事,¿我如何讓沒有任何平衡的用戶沒有出現? 對不起,我認爲下面的答案指定我會嘗試 COALESCE(v2_wallet.amount,0) – Asaf

+0

將第一個左加入更改爲內加入。 – Shyju