初めに

SQLの集計関数として、よく用いられているcount()。
こちらについて、表題の通り、引数に項目名を指定する方法と「*」を指定する方法があります。

それぞれの違いをご存知でしょうか?
違いを把握していないと、正しく集計できない場合があります。
今回は、上記の違いについて説明します。

結論

結論は、下記の通りです。

  • count(*):テーブルのレコード件数を集計
  • count(項目x):項目xの欠損(null)以外のレコード件数を集計

他の集計関数も、引数に項目名を指定する場合、その項目の非欠損のレコードを集計対象とします。

集計例

下記データについて、count(*)とcount(項目)の結果の違いを見てみましょう。

[データ]

社員ID社員名
1佐藤
2田中
3null
4高橋
5null
6飯田
社員マスタ

例1. count(*)

select count(*) as cnt
from 社員マスタ
;

集計結果:

cnt
6
count(*)の結果

例2. count(項目) ※項目=社員名

select count(社員名) as cnt
from 社員マスタ
;

集計結果:

cnt
4
count(社員名)の結果

結果が異なりました。
入力テーブルについて、全データ件数は6件に対して、社員名が欠損(null)以外のデータ件数は4件であり、それぞれの件数が集計された形ですね。
count(*)についての補足ですが、仮に全項目が欠損(null)のレコードが存在しても、そのレコードも集計対象にします。
(上記の通り、全レコードの件数を集計します。)

最後に

count(項目)は、”欠損がどの程度存在するか?”を確認できます。
なので、例えば、機械学習を行う際に、”この項目は十分に情報が入っているのか?”という説明変数の選別に活用されたりします。
count(*)とcount(項目)の違いを把握し、集計ミスを防ぐだけでなく、活用できるようにしましょう。

By clear

データエンジニア・機械学習・分析等を主とし、Webアプリ開発も行っているフリーランスです。