【BigQuery】COUNTIF関数とは?意味や使い方までわかりやすく解説!

B!

BigQueryを使ったデータ分析や集計業務において、「特定の条件を満たすデータがいくつあるか?」を一瞬で調べたい場面はとても多い。

そんな時に非常に便利なのが、BigQuery標準SQLで利用できるCOUNTIF関数である。

この関数を使えば、面倒なサブクエリや複雑なCASE式を使わずに、1行で「条件に合うレコード数」だけを素早く集計できる。

この記事では、SQL初心者にも分かりやすく、COUNTIF関数の意味や基本的な使い方、活用シーン、注意点までをなるべくわかりやすく解説する。

スポンサーリンク

COUNTIF関数とは?

COUNTIF関数とは、「指定した条件を満たす行の数」をカウントして返す集約関数だ。

通常のCOUNT関数は、NULLでないレコード数を集計するだけだが、COUNTIFは「条件式」を直接指定できる。

そのため、「○○のときだけ数えたい」といった集計処理をシンプルに記述できるのが、COUNTIF関数の最大の特徴だ。

例えば、売上テーブルから「金額が1万円以上の注文数」を調べたい場合、COUNTIFを使えば次のようなSQLになる。

この例では、各行で「amount >= 10000」という条件式がTRUEになる行だけを数え、その合計をlarge_order_countとして返している。

COUNTIFは、従来のSUM(CASE WHEN ...)やCOUNT(CASE WHEN ...)のような書き方よりも直感的かつコード量が短く済むため、初心者でも使いやすい。

スポンサーリンク

COUNTIFの基本構文

COUNTIFの基本的な構文は非常にシンプルで、以下のように記述する。

この「条件式」の部分には、任意の条件式(TRUE/FALSEを返す)を記述できる。

例えば、「status = 'active'」や「score >= 60」、「is_member IS TRUE」など、テーブル内のカラムを使った論理判定式を直接指定できる。

主な条件式の例:

  • age >= 20 ・・・20歳以上の人数をカウント
  • gender = 'female' ・・・女性だけをカウント
  • is_deleted IS FALSE ・・・削除されていないデータ数をカウント
  • price BETWEEN 1000 AND 5000 ・・・価格が1000円以上5000円以下の件数をカウント

具体例で見てみよう。

例1:ステータスが「active」のユーザー数を調べる

例2:売上が5000円以上の商品数を調べる

このようにCOUNTIF関数は、条件式を直接記述するだけで「その条件を満たすデータがいくつあるか」を手軽に集計できる。

よくある活用シーン

COUNTIF関数は、実際の業務データを扱う際に様々な場面で役立つ。

ここでは特に利用頻度の高い典型的なパターンを3つ紹介する。

フラグ(TRUE/FALSE)カラムの件数カウント

たとえば、会員テーブルに「is_active」というTRUE/FALSEのフラグカラムがある場合、「アクティブなユーザーが何人いるか」をCOUNTIFで簡単に集計できる。

このクエリは、is_activeがTRUEの行だけをカウントしてくれる。

わざわざCASE式を使わなくてもよく、シンプルな記述で済むのが魅力だ。

条件を満たすレコード数の集計

COUNTIFの強みは、「特定の条件を満たすレコード数」を直感的に数えられること。

たとえば、売上テーブルで「5000円以上の商品が何件売れたか」を調べたい場合は下記のようになる。

同じように、「女性ユーザーだけ」「ステータスが有効なデータだけ」といった集計もすぐ書ける。

複数のCOUNTIFを使ったケース

COUNTIFは、SELECT句の中で複数回使うこともできる。

これにより、「条件ごとの件数」を一度に集計して比較しやすくなる。

下記では男性と女性の数をそれぞれ COUNTIF を使ってカウントしている。

このように複数の異なる条件で件数を並べて比較したい時にも便利だ。

GROUP BYとの組み合わせ

COUNTIF関数は、GROUP BY句と一緒に使うことで「グループごとに条件を満たす件数」を簡単に集計できる。

これは、ユーザー属性別・商品カテゴリ別・月別など、分類ごとに条件付きカウントをしたい場面でとても役立つ。

例えば、以下のようなsalesテーブルがあったとする。

store_id amount
101 6000
101 4500
102 7000
102 3000
102 8000

グループごとにCOUNTIFする例

例えば、上記 sales テーブルで「店舗ごとに5,000円以上の高額商品がいくつ売れたか」を集計したい場合、次のようなクエリになる。

このクエリでは、店舗(store_id)ごとに「amountが5,000円以上」のレコード件数が big_sales_countとして、下記のようにまとめて表示される。

注意点・よくあるエラー

COUNTIF関数は直感的で使いやすい反面、データの内容やSQLの書き方によっては意図しない結果やエラーが発生することもある。

ここでは初心者が特に注意すべきポイントと、実際によくあるミスやエラー例を解説する。

NULL値やデータ型に関する注意

COUNTIFは、条件式がTRUEと評価された場合のみカウントする。

FALSEやNULL(未入力・空欄)はカウントされない。

とくにNULLの扱いには注意が必要で、たとえばフラグカラムにNULLが含まれている場合、TRUEだけが集計されて思ったより少ない値になることがある。

この例でis_activeがNULLの行はカウントされない。

本来はFALSE扱いにしたい場合、IFNULLやCASE式で明示的に値を補正してから集計するのがおすすめだ。

また、条件式に数値や文字列をそのまま書く場合、データ型の違いで意図通りに判定されないことがあるので、比較演算子(=, >=, <, IS, LIKE など)を正しく使うのがおすすめだ。

複雑な条件の書き方

COUNTIFはシンプルな条件式だけでなく、ANDやOR、IN、BETWEEN、CASEなどを組み合わせて複雑な条件指定も可能だ。

ただし、カッコの付け方や論理演算子の優先順位を間違えると、思わぬ集計ミスにつながるので要注意。

例:複数条件をANDで組み合わせる場合

 

上記では、status = 'active' とcreated_at >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)) の2つの条件をANDで組み合わせている。

どちらもTRUE(ステータスがアクティブで作成日が今日から30日以内のユーザー)の時だけrecent_active_count がカウントされる。

条件が複雑になる場合は、見やすさやメンテナンス性のためにも適宜インデントやカッコを活用するのがおすすめだ。

結果が0になるパターン

COUNTIFで集計した結果が0になる場合、「本当に条件に合うデータがない」ケースも多いが、条件式の書き方やデータの値の不一致が原因で、意図せず0になっていることもある。

  • データ型の違い(例:数値型と文字型の比較)
  • 大文字・小文字の違い(例:"Active" と "active")
  • 空白や全角・半角の混在
  • NULLが想定より多く含まれている

SQLの実行前に対象データの値や型を確認し、COUNTIFで期待通りの集計ができているか必ずチェックしよう。

特に初心者のうちは、想定と違う結果になった場合に、データ内容と条件式の両方を落ち着いて見直すことが大切である。

このように、COUNTIFは便利な一方で、NULLやデータ型、複雑な条件式の扱いには注意が必要だ。

正しく使いこなすためにも、よくある落とし穴や失敗例を事前に知っておくと、トラブルを防ぎやすくなる。

まとめ

COUNTIF関数は、BigQueryで「特定の条件を満たすデータ件数」を簡単に集計できる、とても便利な集約関数である。

COUNTIFの最大のメリットは、「条件を書くだけで、その条件に合う行だけを数えてくれる」点だ。

複数条件の集計やグループごとの分析、フラグカラムのカウントなど、現場の多くの集計パターンに柔軟に対応できるため、日々のレポートやダッシュボード作成でよく使う。

COUNTIF関数をきちんと理解して使いこなせれば、BigQueryやSQLのデータ集計はきっと今より効率化できるはずだ。

 

最新の記事はこちらから