オーロラさんの勉強帳

33歳、未経験からIT業界へ。SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

【SQL】【基礎】COUNT関数とNULLの関係 (COUNTでレコード数を求める) 

今日はCOUNT関数とNULLについて記載します。
COUNTでNULLを数える場合、数えない場合があるので、その点も踏まえて色々なサンプルSQLでCOUNT関数を勉強していきましょう。

 

<目次>

 

COUNT関数とは

COUNT関数はレコード数(行数)をカウントする関数です。
戻り値は数値型です。

 

記入例

select count(*) from test_history;
select count(列名) from test_history;
select count(distinct 列名) from test_history;

COUNT関数でNULLを数える場合と数えない場合

COUNT(*)のように*を指定した場合は、NULLも含めたテーブルのレコード数(行数)をカウントします。
COUNT(列名)のように列名を指定した場合は、NULLはカウントしません。NULL以外のレコード数(行数)を数えます。

 

select count(*) from テーブル名;
→*はそのテーブルのNULLも含めた行数をカウントする

 

select count(列名) from テーブル名;
→列名を指定した場合は、NULLを含まない行数をカウントする

 

特定のカラム(列)のデータの種類数を求めたい場合

その列のデータの種類の数を求めたいときは、重複した行をまとめるDISTINCTと組み合わせて以下のように使います。

 

select count(distinct 列名) from テーブル名;
→指定した列のデータの種類の数をカウント(NULLは数えない)

 

NULLも1つのデータの種類として数えたい場合は、NVL関数で以下のように使います。
 

select count(NVL(列名,0)) from テーブル名;
→NULLがあれば、NULLも1つのデータの種類として数える。

間違いやすいIS NULL条件を指定した場合のCOUNT

以下のようなテーブルがあったとします。

f:id:auroralights:20200608234041p:plain

select count(count_b) from test_count where count_b is NULL;
→count_b id NULLのcount_bのレコード数ですが、count(列名)ではNULLを数えないので0が返ってきます。

 

select count(id) from test_count where count_b is NULL;
→count_b is NULLのidのレコード数は5になります。idは主キーのためNULLが無いので、count_bがNULLのレコード数を求めることができます。

 

以上です。