集計関数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

関連記事

テーブルから列を削除する「ALTER TABLE テーブル名 DROP COLUMN 削除する列名」

既存のテーブルから指定した列を削除する 既存のテーブルで不要になった列を削除する方法です。

記事を読む

GROUP BYとHAVINGで最新日付データを取得する

GROUP BYとHAVINGで最新日付データを取得する 社員マスタなどで最新のレコードのみを取得

記事を読む

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

SQLServerでテーブル型を戻り値とする関数を作る SQLServerではINT型やVARCH

記事を読む

SQLで前の行と同じ値は表示しないようにする

前の行と同じ値は表示しない SQLで前の行と同じ値は表示しないようにするして 伝票印刷のような処

記事を読む

SELECTでUNIONは複数個使える

SELECTでの複数のUNIONの使い方 SELECTでUNIONは複数個、連続して使えるようです

記事を読む

SQLで指定された年月日の月末日付を取得する

指定された年月日の月末日付を取得 SQLserverには指定された年月日の月末日付を取得する関

記事を読む

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

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

記事を読む

ALTER TABLE ADDでテーブルにカラムを追加する

SQL Serverでテーブルにカラムする SQL Serverでテーブルにカラムを追加します。

記事を読む

データベースに登録されている内容を固定長の長さで出力する(2)

登録されている内容を固定長の長さで出力する 先日作成したデータベースに登録されている内容を固定長の

記事を読む

SQLServerではTRIM関数がありません

SQLServerでは空白を取り除くTRIM関数がない SQLServerではOracleやMyS

記事を読む

日付の重複をSQLで検索する

SQLを使って期間の重複を見つけ出す SQLを使って、開始日付、終了

指定された月の日数をSQLで求める

指定された月の日数をSQLで求める SQLServerには該当月

SQLServerのエラーコード一覧

SQLServerで発生するエラーコードとその内容を表にしてみました。

SQLServer
指定した値と同じ場合はNULLを返すNULLIF関数

使いどころがいまいち不明な「NULLIF()」 SQLServerに

SQLServer
SQLServerでトリガーを扱ってみる

INSERT、UPADTE、DELETEトリガーを扱ってみる SQL

→もっと見る



PAGE TOP ↑