2016-05-24 12 views
0

を考えると、以下の表SQLカウント発生

FlightID| Roles 
1  | Pilot 
1  | Steward 
1  | Steward 
2  | Pilot 
2  | Co-Pilot 

どのように私は、各個別のフライトでスチュワードの数を決定することができますか?

FlightID| Count 
1  | 2 
2  | 0 

は、まず、私が試した:出力は次のようにする必要があります

select FlightID, count(Role) from A group by FlightID 

が、これは私の飛行あたりの役割の合計数を示します。そして、私が試した:

select FlightID, count(Role) from A where Role="Steward" group by FlightID 

それは私の飛行あたりのスチュワードの数を与えるので、これは部分的に正しいですが、それは考慮に0スチュワードを取ることはありません。結果に0人のスチュワードを含めるにはどうすればよいですか?

答えて

2

テーブルには主キーがありませんか?それがない場合は、これはかなり簡単LEFT JOIN次のとおりです。

SELECT a1.FlightId, COUNT(a2.FlightId) 
FROM A a1 LEFT JOIN A a2 ON a1.id = a2.id 
AND a2.Roles = 'Steward' 
GROUP BY a1.FlightId; 

http://ideone.com/BySBSx

+0

ありがとうございました、LEFT JOINが鍵でした。 –

3

条件付き集計を使用できます。

+0

ありがとうございました。あなたは、 ".. .. else else .. end"を使わないで道を見ますか? –

関連する問題