【BigQuery×SQL】データの件数を数える方法【COUNT関数】

「SQLを勉強し始めたばかりだけど、どうやってデータを数えればいいの?」
「大量のリストから特定の数字を出すのが難しそう……」

と悩んでいませんか?

この記事を読めば、COUNT関数の使い方がわかり、今日から実務で「パッと数字を出す」集計ができるようになります。

SQLでデータを数えるのは、実はExcelのフィルター機能よりも簡単で、ミスも起きにくい方法です。

日々の事務作業を効率化する「便利な道具」として、まずは基本のCOUNT関数からマスターしていきましょう。

学習をスムーズに進めるために

本サイトでは、実務での再現性を高めるため、全ての記事で共通のサンプルデータを使用しています。

自分のBigQuery環境で実際に手を動かしながら学ぶと、習得スピードが格段に上がります。

まずはサンプルデータ取込手順を参考に、準備を済ませておきましょう!

1. COUNT関数とは

COUNT(カウント)関数は、一言でいうと「データの行数を数える」ための道具です。

Excelでいうところの「COUNT関数」や「COUNTA関数」に近いものですが、BigQuery(SQL)を使うことで、何百万件という膨大なデータも一瞬で数え上げることができます。

実務では、以下のようなシーンで必ず使われます。

・昨日の売上件数を確認する時:売上リストが全部で何行あるか数える ・特定の商品の在庫を調べる時:商品名簿から、在庫があるものを数える ・イベントの申込者数を確認する時:延べ人数ではなく「重複を除いた実数(ユニークな人数)」を出す

「今、手元にどれくらいのデータがあるのか?」というボリューム感を正しく、かつ迅速に把握することは、正確な事務レポートを作成する上で最も重要な第一歩です。

2.基本的な書き方

COUNT関数の基本は非常にシンプルです。

SELECT
  COUNT(列名)
FROM
  `プロジェクト名.データセット名.テーブル名`;
・SELECT COUNT(列名):〜という列(項目)を数えてください。 ・FROM テーブル名:〜というテーブル(データ保管場所)から持ってきてください。

非常に直感的ですよね。「どこから」「何を」数えるか。この2点を指定するだけです。

3. サンプルデータによる実践

実務をイメージするために、サンプルデータの『customer(顧客名簿)』を使って実際に集計してみましょう。

【使用するテーブル:customers】

3-1.顧客の総数を数える(例)

テーブルにある全ての行(全顧客数)を数えるときは、特定の列名ではなく *(アスタリスク)を使います。これは「全ての項目」という意味です。

-- customerテーブルの全行数をカウント
SELECT
  COUNT(*) AS total_customers
FROM
  test.customers;

3-2.実行結果

※ AS total_customers と書くことで、結果の項目名にわかりやすい名前(別名)をつけることができます。実務で誰かに結果を共有する際は、この「名前付け」が非常に喜ばれます。

3-3.実行フロー【視覚化】

SQLの実行ボタンを押してから結果が出るまでの数秒間、BigQueryの内部では次のような「データの集約」処理が行われています。

PROSES

①:FROMで指定した customers テーブルから、対象となる行をすべて吸い出します。

②:上から順にデータ(行)があるか確認し、カウントを積み上げていきます。

③:バラバラだった行を最終的に「12」という1つの数字に集約し、見出し(AS total_count)をつけて画面に出力します。

これが、COUNT関数の動きになります。

4.つまずきポイント・注意点

4-1.初心者がハマる罠:NULL(空欄)のカウント漏れ

SQLには「空欄(NULL)は無視する」という独特のルールがあります。
POINT

・COUNT(*) :「行そのもの」を数えるので、特定の列の値が空欄(NULL)であっても1件として数えます

・COUNT(列名) :「特定の列」の値が入っている行を数えるので、値が空欄(NULL)の場合、値が入っていないとみなされ、1件として数えません

例:COUNT(gender)でカウントする場合 ※gender(=性別)

結果として、空欄(NULL)は無視され、11件となります。

つまり、特定列が空欄(NULL)である行をカウントから除外したい場合、COUNT(列名)を指定すれば良いということになります。
CAUTION

「想定より数字が少し足りない」と感じたら、列名を指定してカウントしていないか確認してください。事務作業で「全件数」を出したいときは、迷わず COUNT(*) を使うのが安全です。

5.まとめ

「全体のボリューム」を知りたいなら COUNT(*) :
すべての行を数えるこの書き方は、事務集計の基本中の基本です。データが1件でもある限り、中身が空欄であっても漏らさず数え上げることができるため、まず全体像を把握したい時に使いましょう。

「入力漏れ」をチェックしたいなら COUNT(列名):
特定の列名を指定すると、空欄(NULL)を除いて数えるという性質があります。これを利用して、「顧客名簿の中で、性別が未入力の人は何人いるか?」といった事務的な不備の確認に活用できます。

集計の「見出し(AS)」は必ずセットで付ける:
COUNT関数を実行すると、結果の見出しがデフォルトでは「f0_」などの意味不明な名前になることがあります。実務レポートとしてそのまま使えるよう、AS total_count のように、何を集計した数字なのかを定義する癖をつけましょう。

この使い分けができるだけで、あなたのレポートの正確性はぐっと向上します。

「文法はわかった。でも、実務でミスをするのがまだ怖い……」という方へ
➡ 【独学の限界?】SQL学習で「あと一歩」が進まない時の処方箋

目次

用語辞典