0

これはおそらく非常に単純なことです....しかし、今のところ、1つのステートメントでそれを行う方法を考えることができません。

count(id) WHERE status = APP を選択し、すべてのカウントについて繰り返すことができることを知っています。しかし、私はそれを 1 つのクエリで完了したいと考えています。都市でグループ化し、ステータスと合計でグループ化しますか?

表は以下の通りです....

City  |  Status  |  
City 1    APP
City 1    NH
City 1    APP
City 1    NEW
City 2    NEW
City 2    APP
City 2    APP
City 2    NH

次の配列を返したい。

 {[cityname]=>City1,[Total]=>4,[APP]=>1,[NH]=>1,[NEW]=>2}, 
 {[cityname]=>City2,[Total]=>4,[APP]=>2,[NH]=>1,[NEW]=>1}

私の現在のクエリは...

 SELECT COUNT(id) as total, city WHERE status = 'APP' GROUP BY city
 SELECT COUNT(id) as total, city WHERE status = 'NH' GROUP BY city
 SELECT COUNT(id) as total, city WHERE status = 'NEW' GROUP BY city

これが非常に単純であることはわかっていますが、しばらく経ち、これらを 1 つのステートメントに正確に組み合わせる方法を忘れてしまいました。

4

3 に答える 3

2

APPNH、が列である都市ごとの行が必要な場合は、このようにNEW条件付きを使用できますSUM()

SELECT city,
       COUNT(*) total, 
       SUM(CASE WHEN status = 'APP' THEN 1 ELSE 0 END) app,
       SUM(CASE WHEN status = 'NH'  THEN 1 ELSE 0 END) nh,
       SUM(CASE WHEN status = 'NEW' THEN 1 ELSE 0 END) new
  FROM table1
 GROUP BY city

出力:

| | 都市 | 合計 | アプリ | NH | 新しい |
|--------|-------|-----|----|-----|
| | 都市 1 | 4 | 2 | 1 | 1 |
| | 都市 2 | 4 | 2 | 1 | 1 |

これがSQLFiddleのデモです

于 2013-09-22T06:05:12.097 に答える