1

私のMYSQLカンフーは弱く、いくつかのガイダンスが必要です。ここに私の2つのテーブルがあります:

TABLE SHIPS

id |  ship_name
1     recon ship
2     light fighter
3     heavy fighter
4     light cruiser

TABLE FLEET

user_id | ship_id | amt
173          1       3
173          2       4
173          3       1
173          4       0
169          1       5
169          2       2
169          3       0
169          4       0

私の出力では、次のようなデータを取得しようとしています:

ship_name      | amt1 | amt2
recon ship        3       5
light fighter     4       2
heavy fighter     1       0

ここで、amt1 はユーザー 173 の金額で、amt2 はユーザー 169 の金額です。私はこれについて自分自身を明確にしたことを願っています, そしてありがとう!

編集:もう1つの船を追加し、両方のユーザーがその船に対してamt = 0を持っている場合、そのような場合を結果から除外するにはどうすればよいですか?WHERE句で試しましたが、エラーがあると言い続けます

4

1 に答える 1

2

これは、質問に応じて基本的なニーズに対応します。

SELECT  a.ship_name,
        MAX(CASE WHEN b.user_ID = 173 THEN amt END) amt1,
        MAX(CASE WHEN b.user_ID = 169 THEN amt END) amt2
FROM    Ships a
        INNER JOIN Fleet b
            ON  a.id = b.ship_ID AND
                b.user_ID IN (173, 169)
GROUP   BY a.ship_name

user_IDステートメントに値を指定せずにすべてを返したい場合は、動的 SQLを使用することをお勧めします。

更新 1

HAVING句を追加し、

SELECT  ...
FROM    ...
GROUP   BY ....
HAVING  MAX(CASE WHEN b.user_ID = 173 THEN amt END) <> 0 AND
        MAX(CASE WHEN b.user_ID = 169 THEN amt END) <> 0
于 2013-04-13T07:31:10.273 に答える