ぱそくま ろご
Windows > SQL Server >  COUNT([フィールド])の意味や便利なNULLIF()関数

COUNT([フィールド])の意味や便利なNULLIF()関数

COUNT(*)とCOUNT(フィールド)の違い

MIN()やMAX()のようにCOUNT()の引数にもフィールドを指定することができます。たとえば、以下のようにすることができます。

sql> SELECT COUNT(NAME_MEI) FROM TM_EMPLOYEE 

ここでCOUNT(*)との違いは、集合関数はNULLを無視するとう前提があるので、フィールドの値がNULLの場合、カウントされません。 よって、上記のSQLは名前が入力されているレコードのみカウントされます。 たとえば、以下のようなSQLを実行すると全体の件数と名前が未入力の件数が取得することができます。

sql> SELECT COUNT(*) AS ALL_COUNT,
            COUNT(NAME_MEI) AS NO_NAME_COUNT
       FROM TM_EMPLOYEE
    ;
sql> ---------------------------
sql> ALL_COUNT | NO_NAME_COUNT
sql> ---------------------------
            10 |             9


便利なNULLIF()関数

上記SQL文ですとNAME_MEIフィールドの値がNULLではなく空文字の場合はカウントされてしまいます。 そこでNULLIF()関数を使って強制的に空文字をNULLにし、カウントすると期待する結果が得られれます。

ちなみにNULLIF(a, b)関数はaとbの値が同じ場合、NULLを返し、違う場合aを返します。

全体の数と名前が未入力(NULLまたは空文字)の件数を求める

sql> SELECT COUNT(*) AS ALL_COUNT,
            COUNT(NULLIF(NAME_MEI, '')) AS NO_NAME_COUNT
       FROM TM_EMPLOYEE;
sql> ALL_COUNT | NO_NAME_COUNT
            10 |             9
sql>