集計関数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
  • 関連記事

    SQLでCASE~WHENを使ってみる(2)

    CASE~WHENはSQLでCASE~WHENを使ってみるとは別に WHENの後に評価させる式を書

    記事を読む

    SQLで西暦から和暦変換を行う

    SQLを使って西暦から和暦変換を行う SQLServerには西暦和暦変換関数が無いようなので、

    記事を読む

    CASE WHENを使ってSQLでIF文を使わずに条件を分岐する

    SQLでIFを使わずに条件分岐する SQLでIFを書けばWHERE句の内容を変えて検索できますが、

    記事を読む

    SQLで月曜日始まりのカレンダー作成

    カレンダー作成 SQLServerで月曜日始まりの1週間分のカレンダーを作成します。 実行す

    記事を読む

    Transact-SQLで動的にSQLを編集してカーソルを使用する

    2時間もハマったのでメモ書きとして記述します。 Transact-SQLで動的にSQLを編集し

    記事を読む

    SQLServerのテーブルやカラムにコメントをつける方法

    SQLServerでテーブルやカラムにコメントをつける SQLServerで作成したテーブルやカラ

    記事を読む

    SQLServerのエラーコード一覧

    SQLServerで発生するエラーコードとその内容を表にしてみました。 量が多いので別のサイトに分

    記事を読む

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

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

    記事を読む

    SQLで大文字、小文字変換を行う

    SQLで大文字⇔子文字変換を行う SQLで大文字⇔小文字変換を行うには「UPPER関数」と「LOW

    記事を読む

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

    ストアドプロシジャーのソースを表示します。

    記事を読む

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

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

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

    テーブルからテーブルへデータコピー 以前の投稿SELECT INTO

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

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

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

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

    SQLServerでホスト名を取得する

    SQLServerが動作しているホスト(サーバ)名取得 SQLSer

    →もっと見る



    PAGE TOP ↑