2013-05-30 313 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