21

私はこのようなテーブルを持っています:

id  value
1   0
1   1
1   2
1   0
1   1
2   2
2   1
2   1
2   0
3   0
3   2
3   0

ここで、それぞれについてid、0と1の発生数と、そのIDの発生数(値は任意の整数)をカウントしたいので、最終結果は次のようになります。

id  n0  n1  total
1   2   2   5
2   1   2   4
3   2   0   3

私はこのステートメントで最初と最後の行を取得することができました:

SELECT id, COUNT(*) FROM mytable GROUP BY id;

しかし、私はここから少し迷っています。巨大なステートメントなしでこれを達成する方法についてのポインタはありますか?

4

2 に答える 2

39

MySQLでは、次を使用できますSUM(condition)

SELECT   id, SUM(value=0) AS n0, SUM(value=1) AS n1, COUNT(*) AS total
FROM     mytable
GROUP BY id

sqlfiddleでそれを参照してください。

于 2012-07-07T18:12:24.007 に答える
0

@Zaneが上でコメントしたように、典型的な方法は、CASE式を使用してピボットを実行することです。

SQL Serverに、表示される可能性のあるPIVOT演算子が追加されました。DECODE()とIIF()は、OracleとAccessの古いアプローチであり、まだ嘘をついているかもしれません。

于 2012-07-07T19:52:51.067 に答える