1

チャーター旅行の副操縦士を示す行がありますが、すべてのチャーター旅行に副操縦士がいるわけではありません。

これについてどうすればよいかを理解するのに苦労しています。

その行のnullではない値の数(コプリオットがあることを意味します)を取得し、それを合計で割る必要があると思います。それを分割する方法がわかりません。その行の合計行数を取得するにはどうすればよいですか。ハードコードすることもできますが、データベースにさらにデータが入力されると役に立ちません。

その行にある列の数を数えるだけの方法はありますか?

ありがとう

4

2 に答える 2

7

標準 SQL では、次のことができます。

select (100.0*count(copilot))/count(*)
from t

SQL では、式count(copilot)は NULL ではない値の数をカウントします。式count(*)は行の総数です。

SQL の一部のバージョンでは、2 つの整数を除算すると整数が生成されます。つまり、0.5 ではなく 1/2 = 0 です。非整数除算を確実にするために、「100」は ではなく非整数定数として表現され100ます。

于 2013-04-20T17:51:01.710 に答える
0
select count(copilot is not null)*100/count(*) as copilot_percent
from charters

あなたの質問は、テーブルに複数の副操縦士列があることを示唆しているようです。まず第一に、これは不適切な DB 設計を示唆しています。DB を独自の従属テーブルに移動して、DB を正規化する必要があります。ただし、この設計では、次のようにします。

select count(copilot1 is not null and copilot2 is not null and copilot3 is not null ...)*100/count(*) as copilot_percent
from charters;
于 2013-04-20T17:26:57.730 に答える