集計関数COUNT()でのNULLの扱い

公開日: : 最終更新日:2013/12/10 SQL Server , , ,

集計関数COUNT()でのNULLの扱いは注意が必要

集計関数のCOUNT()は条件にマッチするレコードの件数を
数えるのに使われます。

よくあるパターンのSQL

よくあるのは

のように集計関数COUNT()の引数に「*」を指定するもの。

これは意図通り「条件にマッチする件数」を取得できます。

実は集計関数COUNT()は引数に「*」を指定場合は
純粋に引数に「条件にマッチする件数」を取得しますが、
「*」ではなく「項目名」を指定した場合はその項目に
NULLが含まれているとその行はカウントしません。

以下に具体例で見てみます。

テーブルの準備

データ検索用のテーブルを準備します。
このテーブルは生徒の国語と英語の試験結果を管理
します。
受験していない場合はその項目はNULLになります。

データの準備

データを準備します。

上記のデータでは四郎さんは英語は未受験になります。

name j_point e_point
五郎さん 80 80
三郎さん 70 70
四郎さん 0 NULL
次郎さん 80 80
太郎さん 90 90

3.NULLを含めたデータの件数

集計関数COUNT()でNULLを含めた項目をカウントすると
以下のようになります。

レコード総数 国語の受験者数 英語の受験者数
5 5 4

国語の受験者数は5人なのに対して英語の受験者数は四郎さんを除いた
4人になってます。

集計関数COUNT()はNULLを含む項目が指定された場合は
NULLをカウントの対象から外します。

なので、正しい平均点を求めようと思うと
COUNT(*)ではなくCOUNT(国語の受験者数)、COUNT(英語の受験者数)
と言うように指定しなければなりません。

国語の平均点 英語の平均点
64 80

集計関数SUM()やAVG()なども同じ様な動作をします。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

呼び出したストアドプロシジャーの戻り値を使用する

呼び出したストアドプロシジャーの戻り値を使用する 処理の構成上、ストアドプロシジャーから他のストア

記事を読む

sp_pkeys – SQL Serverでテーブルのプライマリキーを取得する

sp_pkeysを使ってSQL Serverでテーブルのプライマリキーを取得します。

記事を読む

SQLServerでTrue,FalseのようなBoolean型をあつかう

SQLServerでBoolean型を扱う SQLServerには「Boolean」という型は

記事を読む

SQLサーバ

連番中で 「歯抜け」の番号を見つけ出すSQL

テーブル内の連番の歯抜け番号を探す よくある処理でテーブルに設定されている連番の中で 「歯抜け」

記事を読む

SQL Server-ストアドプロシジャーのソースを表示する2

過去の投稿「SQL Server-ストアドプロシジャーのソースを表示する1」で示した方法では 1つ

記事を読む

既に存在するテーブルに他のテーブルからデータをINSERTする方法

テーブルからテーブルへデータコピー 以前の投稿SELECT INTOで既存テーブルのデータを新規テ

記事を読む

SQLServer

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する bcpコマンドを使

記事を読む

SQLServer

GROUP BYとHAVINGを使ってデータの重複を探しだすSQL

GROUP BYとHAVINGで重複を探す SQLでGROUP BYとHAVINGを使ってデー

記事を読む

SQLServerで作ったテンポラリテーブルが見つからず無効になってしまう

SQLServerでテンポラリテーブルを利用して処理を行う時に 「オブジェクト名 '#tmp_ta

記事を読む

SQLで指定月のカレンダー作成

ストアドプロシージャでカレンダーを作成する SQLServerでストアドプロシージャ (store

記事を読む

SQL Server-SQLでテーブル仕様書になるものネタを取ってみる

SQLでテーブル仕様書になるものネタを取ってみます。 こ

テーブル型を戻り値とする関数の作成方法

SQLServerでテーブル型を戻り値とする関数を作る SQLSer

SQLで当月の第何週目の何曜日か取得する

SQLで今日は第何週、何曜日か取得する SQLServerでは関数で

ALTER TABLEで既存のテーブルのプライマリーキー(主キー)を変更する

ALTER TABLEで既存のテーブルのプライマリーキー(主キー)を変

SQL Server-ストアドプロシジャーのソースを表示する2

過去の投稿「SQL Server-ストアドプロシジャーのソースを表示す

→もっと見る



PAGE TOP ↑