初めに
SQLの集計関数として、よく用いられているcount()。
こちらについて、表題の通り、引数に項目名を指定する方法と「*」を指定する方法があります。
それぞれの違いをご存知でしょうか?
違いを把握していないと、正しく集計できない場合があります。
今回は、上記の違いについて説明します。
結論
結論は、下記の通りです。
- count(*):テーブルのレコード件数を集計
- count(項目x):項目xの欠損(null)以外のレコード件数を集計
他の集計関数も、引数に項目名を指定する場合、その項目の非欠損のレコードを集計対象とします。
集計例
下記データについて、count(*)とcount(項目)の結果の違いを見てみましょう。
[データ]
社員ID | 社員名 |
1 | 佐藤 |
2 | 田中 |
3 | null |
4 | 高橋 |
5 | null |
6 | 飯田 |
例1. count(*)
select count(*) as cnt
from 社員マスタ
;
集計結果:
cnt |
6 |
例2. count(項目) ※項目=社員名
select count(社員名) as cnt
from 社員マスタ
;
集計結果:
cnt |
4 |
結果が異なりました。
入力テーブルについて、全データ件数は6件に対して、社員名が欠損(null)以外のデータ件数は4件であり、それぞれの件数が集計された形ですね。
count(*)についての補足ですが、仮に全項目が欠損(null)のレコードが存在しても、そのレコードも集計対象にします。
(上記の通り、全レコードの件数を集計します。)
最後に
count(項目)は、”欠損がどの程度存在するか?”を確認できます。
なので、例えば、機械学習を行う際に、”この項目は十分に情報が入っているのか?”という説明変数の選別に活用されたりします。
count(*)とcount(項目)の違いを把握し、集計ミスを防ぐだけでなく、活用できるようにしましょう。