1

そのため、特定のタイプに基づいて DB テーブルをクエリする必要があり、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

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

total はタイプ 1 と 3 の合計です。すべての合計が必要な場合は where を削除します

于 2013-05-30T08:54:28.147 に答える
1

ユーザーIDごとに1行で、両方の値が必要な場合は、次のようにする必要があります

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 に答える