web-dev-qa-db-ja.com

OracleでcountIf()を実行する方法

Excel関数と同じ出力を提供する変数を選択するにはどうすればよいですか。

COUNTIFS(A1:D1,"<25", A1:D1, ">16")?

つまり私の4つのフィールドの値が16から25の間にある回数を数えます。

7
amsbam1

これを行うには、count()およびcase式を使用します。注:caseにはオプションのelse句があります。使用しない場合、デフォルトのelse "値"はnullです。カウントはnull以外の値のみをカウントするため、これらの観察を組み合わせてコンパクトなコードを記述できます。何がカウントされるかは関係ありません。したがって、case式は数値を返す可能性があります(1は通常ですが、0も同じように有効であり、値がSUMMEDではなくCOUNTEDであるため、同じ結果になります)-しかし、 ' x 'またはケース式の日付。説明のために、文字列を使用します。

select count( case when col > 16 and col < 25 then 'x' end ) as ct from your_table;

ここに your_tableはテーブルの名前、colは値を含むcolumnの名前、ctは結果の列の名前(条件を満たす値の数)。

もちろん、データベースでは同じ結果をより簡単に得ることができます:

select count(*) as ct from your_table where col > 16 and col < 25;

ただし、値は1つの列にあることに注意してください。

代わりに、4つの列と多くの行を持つテーブルがあり、すべての列のすべての値が数値であり、厳密に16〜25 IN EACH ROWの間の値の数を示す列を追加する場合、ソリューションは異なります(ただし、同じアイデアを使用しています):

select col1, col2, col3, col4, 
       case when col1 > 16 and col1 < 25 then 1 else 0 end +
       case when col2 > 16 and col2 < 25 then 1 else 0 end +
       case when col3 > 16 and col3 < 25 then 1 else 0 end +
       case when col4 > 16 and col4 < 25 then 1 else 0 end    as ct
from   my_table;
6
mathguy

これは、SQLクエリでcaseを使用して行います。

select sum(case when col between 16 and 25 then 1 else 0 end)
from t;

betweenはSQLでは包括的であり、排他的ではないため、コードロジックに基づいていることに注意してください。

select sum(case when col > 16 and col < 25 then 1 else 0 end)
from t;
4
Gordon Linoff

あなたは_'user_table'_を持っていると考えてください。ユーザーの一部の'status'active (code-11)であり、その他はinactive (code-22)です。以下のsqlを使用して、アクティブと非アクティブをカウントできます。

select count(case when status = 11 then 1 end) u_active, count(case when status = 22 then 1 end) u_inactive, from user_table;

0
Mr. Mak