0

このクエリを正しく取得しようとすると問題が発生します。

次のデータを含むテーブルがあるとします。

id    |   xyz     |   code
===========================
1     |    1      |    ba
2     |    1      |    zz
3     |    1      |    ba
1     |    1      |    zz
1     |    1      |    ba
2     |    1      |    zz

そして、IDでグループ化された「xyz」の合計を取得したいと思います。

SELECT id, SUM(xyz) as mysum FROM table WHERE xyz=1 GROUP BY id

結果は次のようになります。

id   |  mysum 
================
1    |  3
2    |  2
3    |  1

完全。

問題は、私が実際にやりたいことは、「コード」列でもグループ化することです。そのため、コード「ba」を持つ 2 つのエントリを持つ id: 1 の場合、結果は次のようになります。これ:

id   |  mysum 
================
1    |  2
2    |  1
3    |  1

ここで、mysql に関する私の限られた理解が失敗します。次のようなクエリを実行すると思うからです。

SELECT id, SUM(xyz) AS mysum FROM table WHERE xyz=1 GROUP BY id, code

しかし、これは明らかに私が望んでいない結果をもたらします。

同じ「コード」を持つ列が既に追加されている場合は省略しながら、列 xyz の SUM を実行するこの種のクエリを実行するにはどうすればよいですか?

4

2 に答える 2

2
SELECT id,
       SUM(CASE WHEN code = 'ba' then 1 ELSE 0 END)
FROM table1
GROUP BY id

フォローアップの質問:id = 2の値が1であるのはなぜですか?ゼロではありませんか?

更新1

SELECT id,
       count(Distinct code)
FROM table1
GROUP BY id
于 2012-11-16T14:48:22.770 に答える
0
SELECT code,SUM(xyz) FROM table GROUP BY code,xyz
于 2012-11-16T14:39:20.997 に答える