Microsoft Excel関数countif
は条件を満たすセルを数えます:
Excel: =COUNTIF(<source>, <condition>)
同じ動作をSQLで得るにはcount
関数内でcase
式を使います:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
Excelでは<ソース>が任意のセル(以下の例ではX:Yを定義しています)。 SQLでは、行のピッキングと列のピッキングは別です。 group by
節とover
節は行を指定する。
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
条件は引用符の下に置かれません-比較演算子を使用する場合でさえも。 デフォルトでもデータベース製品によって異なります。 MySQL、MariaDB、および SQL Server はデフォルトで大文字と小文字を区別しない比較を実行します。 PostgreSQL、Oracle データベース、および SQLite はデフォルトで大文字と小文字の違いを考慮します。
Excel の countif
関数と異なり、SQL では等号 (=
) を持つ文字列の比較時にワイルドカード マッチが適用されません。 SQL でワイルドカードを使用するには、like
演算子を使用する必要があります。 like
演算子はアンダースコア (_
) を1文字のワイルドカードとして使用し、パーセント記号 (%
) を任意の文字数のワイルドカードとして使用します (Excels countif
の ?
と *
のようなものです)。
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
複数列にわたる処理は、列ごとに1つのcount
関数の合計として行われます。
Excel: =COUNTIF(Ax:Cy, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END) + COUNT(CASE WHEN B = 42 THEN 1 END) + COUNT(CASE WHEN C = 42 THEN 1 END)
関数Countifs
はしばしばcase
式のand
条件で実装できます。
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
関数 counta
は同様にcase
式で実装することが可能です。 そのために、SQLでは空文字列とnull
の値を区別しています。 次の式は、null
値も空文字列も持たない行を数えます。
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
なお、SQL の等号演算子 (=
) は null 値を確認するために使用できませんので、代わりに is null
を使用しなければなりません。
More about this and related topics:
-
The SQL
case
expression -
The
filter
clause in SQL -
The SQL
null
value -
Excel
sumif
in SQL