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

コメントを残す

メールアドレスが公開されることはありません。