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
上記SQL文ですとNAME_MEIフィールドの値がNULLではなく空文字の場合はカウントされてしまいます。 そこでNULLIF()関数を使って強制的に空文字をNULLにし、カウントすると期待する結果が得られれます。
ちなみにNULLIF(a, b)関数はaとbの値が同じ場合、NULLを返し、違う場合aを返します。
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>
COPYRIGHT © 2008 Deepnet Inc. ALL RIGHTS RESERVED.