1

所以我必须根据某种类型查询数据库表,并且只想在 1 个查询中进行。以下是我想结合的查询:

  1. SELECT usr_id, SUM(coins) AS coinppv FROM coin_tblWHERE coin_type = 1 GROUP BY usr_id
  2. SELECT usr_id, SUM(coins) AS coinmly FROM coin_tblWHERE 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

我也调查了 JOINing 但我也没有得到我想要的结果。

4

4 回答 4

3

采用In

SELECT usr_id, SUM(coins) 
AS coinppv 
FROM coin_tbl
WHERE coin_type 
IN( 1,3) 
GROUP BY usr_id
于 2013-05-30T08:27:20.390 回答
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涉及两个,则没有太大区别

于 2013-05-30T08:27:23.490 回答
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 的总和,如果需要全部总计,请删除 where

于 2013-05-30T08:54:28.147 回答
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
于 2013-05-30T08:51:03.827 回答