SQL Server

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

投稿日:2013/06/11 更新日:

集計関数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()なども同じ様な動作をします。

当サイトのおすすめ記事

レンタルサーバー 1

当サイトは約5年間、さくらのレンタルサーバで運用させて頂きました。 何かトラブルがあったわけではないのですが、WordPressの表示速度を速くしたくてSSD搭載のレンタルサーバーで運用してみることに ...

プログラミング 2

SQLでIFを使わずに条件分岐する SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを 複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見 ...

SQLServer 3

SQLServerで発生するエラーコードをSQLで取得する SQLServerで発生したエラーコードの内容を メッセージが定義されているテーブルから取得します。 エラーコードを取得するSQL SQLs ...

4

SQLServerでテーブル型を戻り値とする関数を作る SQLServerではINT型やVARCHAR型などを返す関数と同様に ユーザー定義テーブル型を戻り値とする関数を作成できます。 テーブル型を戻 ...

5

アフィリエイトで即効成果を出す アフィリエイトで成果を出す、なかなか難しいですよね。 サイトをいくつも立ち上げてすでにコツをつかんでいる人なら チョチョイっとやっていけるんでしょうけど。 でも実際はこ ...

-SQL Server
-, , ,

Copyright© ソフトウェア開発日記 , 2017 AllRights Reserved.