私のテーブルに次のデータがあるとします。SQLのGROUP BY句を使用すると、1つのグループで複数の異なる値がカウントされる
テーブル名:タスク
+---------+
| status |
+---------+
| open |
| reopen |
| reopen |
| close |
| suspend |
| close |
+---------+
今、私はその状態でレコード・グループをカウントします。 しかし、1つの変更点があります。を開きますとは同じグループのように再オープンします。
私はこの以下のクエリを実行します。
SELECT
status,COUNT(*)
FROM
Task
GROUP BY status
A)私が得たもの。
B)私がしたい。
A) B)
+---------+---------+ +---------+---------+
| status | count | | status | count |
+---------+---------+ +---------+---------+
| open | 1 | | open | 3 |
| reopen | 2 | | close | 2 |
| close | 2 | | suspend | 1 |
| suspend | 1 | +---------+---------+
+---------+---------+
上記のA)からわかるように、私はクエリの結果を得ました。 しかし私はそれを開いて再オープンの記録を数えたいと思います。 B)で見ることができます。
もう1つのことは水平方向に数えたくありません。 どちらが試みましたか?以下のクエリが機能します。
C)
SELECT
COUNT(case status when 'open' then 1 when 'reopen' then 1 else null end) as open
COUNT(case status when 'close' then 1 else null end) as close,
COUNT(case status when 'suspend' then 1 else null end) as suspend
FROM
Task
+---------+---------+---------+
| open | close | suspend |
+---------+---------+---------+
| 3 | 2 | 1 |
+---------+---------+---------+
私の質問です。上記のように、オプションC)を使用せずにB)をどのように達成できますか?
あなたはCだけのやり過ぎである。このsqlfiddle http://sqlfiddle.com/#!9/fdf820