2013-05-30 302 views
1

所以我必須查詢基於某種類型的數據庫表,並希望只在1個查詢中完成。下面是我想結合查詢:MySQL 2查詢合併爲1查詢

  1. SELECT usr_id,SUM(硬幣)AS coinppv FROM coin_tbl WHERE coin_type = 1 GROUP BY usr_id
  2. SELECT usr_id,SUM(硬幣)AS coinmly FROM coin_tbl WHERE coin_type = 3 GROUP BY usr_id

然後我還想得到coinppv和coinmly的總和,最後GROUP BY usr_id。

我曾嘗試做像ff這樣的東西。但我沒有得到我想要的結果: (注意:這個例子不包括總結coinppv和coinmly)

SELECT usr_id, 
(SELECT SUM(coins) FROM `coin_tbl` WHERE coin_type = 1) AS coinppv, 
(SELECT SUM(coins) FROM `coin_tbl` WHERE coin_type = 3) AS coinmly 
FROM `coin_tbl` GROUP BY usr_id 

我也看了成加盟,但我還沒有得到我期待的結果對於。

回答

2
SELECT usr_id, 
     SUM(IF(coin_type = 1,coins,0)) AS coinppv, 
     SUM(IF(coin_type = 3,coins,0)) AS coinmly, 
     SUM(coins) AS total 
FROM `coin_tbl` 
WHERE coin_type IN (1,3) 
GROUP BY usr_id 

總量的1型和3總和,除去在那裏,如果你需要的所有總

的0
+0

太棒了!這是我的問題的解決方案。非常感謝。 – Aadrinmusic

3

使用In

SELECT usr_id, SUM(coins) 
AS coinppv 
FROM coin_tbl 
WHERE coin_type 
IN(1,3) 
GROUP BY usr_id 
+0

沒有。我想通過cointype = 1得到coinppv的總和,並通過cointype 3得到coinmly。用戶可以有來自1型和3型的硬幣,所以上面的解決方案不能解決問題。 – Aadrinmusic

+0

@Aadrinmusic ohh ..對於遲到的回覆(卡在討論中),DonCallisto更新了答案,同時..我知道如果這是你尋找的東西..其他人很高興爲你提供幫助:) :) – swapnesh

2
SELECT usr_id, coin_type, SUM(coins) 
FROM coin_tbl 
WHERE coin_type = 1 OR coin_type = 3 
GROUP BY usr_id, coin_type 

看到它在行動上SqlFiddle

Swapnesh答案(一旦他將編輯)是更好,因爲它使用IN條款就是,如果你更可讀必須控制coin_type針對「許多」不同的類型(比如五或六),但如果只涉及兩個coin_type,則不存在m UCH差異

+0

請參閱我在swapnesh的評論 – Aadrinmusic

+0

@Aadrinmusic:看看我的更新 – DonCallisto

+0

只有usr_id和coinppv在結果中,coinmly不見了,所以不是這樣。謝謝 – Aadrinmusic

1

如果你想在每個用戶ID一行,雙方值,那麼這樣的事情應該去做

SELECT usr_id, SUM(if(coin_type = 1, coins, 0)) AS coinppv, SUM(if(coin_type = 3, coins, 0)) AS coinmly 
FROM coin_tbl 
GROUP BY usr_id 

如果你想要做一個JOIN和假設你有一個表用戶可以使用類似下面的

SELECT usr_id, IFNULL(Sub1.coinppv, 0), IFNULL(Sub2.coinmly, 0) 
FROM user_table 
LEFT OUTER JOIN (SELECT usr_id, SUM(coins) AS coinppv FROM `coin_tbl` WHERE coin_type = 1 GROUP BY usr_id) Sub1 ON coin_tbl.usr_id = Sub1.usr_id 
LEFT OUTER JOIN (SELECT usr_id, SUM(coins) AS coinmly FROM `coin_tbl` WHERE coin_type = 3 GROUP BY usr_id) Sub2 ON coin_tbl.usr_id = Sub2.usr_id