SQL Server - COUNT内で条件を指定する

SQL Serverでは、COUNT関数やSUM関数にIIF関数やCASE式を組み合わせることで、条件に一致するレコードのみを集計することができます。

COUNT 内で条件を指定する方法

COUNT関数は、引数に渡された式の結果がNULLの場合は集計しません。IIF関数を使用し、除外したいレコードの時はNULLを返すことで、条件に一致するレコード件数のみ集計できます。
SELECT COUNT(IIF(<ここにカウントしたい条件>, 1, NULL))
  FROM <テーブル名>

次のSQLは Point列 が 80 以上のレコード件数を表示します。

SELECT COUNT(IIF([Point] >= 80, 1, NULL)) Point80以上
  FROM [SampleTable]

次のSQLは Point列 が 39以下、40~79、80以上のレコード件数を表示します。

SELECT COUNT(IIF([Point] <  40,                  1, NULL)) Point39以下
      ,COUNT(IIF([Point] >= 40 AND [Point] < 80, 1, NULL)) Point40から79
      ,COUNT(IIF([Point] >= 80,                  1, NULL)) Point80以上
  FROM [SampleTable]
実行結果
実行結果

SUM 関数でカウントする

COUNT関数 の代わりに SUM関数 を使用しても同様の集計ができます。IIF の返す値を 条件一致時に 1、不一致時は 0 を返すようにします。

次のSQLは Point列 が 80 以上のレコード件数を表示します。

SELECT SUM(IIF([Point] >= 80, 1, 0)) Point80以上
  FROM [SampleTable]

次のSQLは Point列 が 39以下、40~79、80以上のレコード件数を表示します。

SELECT SUM(IIF([Point] <  40,                  1, 0)) Point39以下
      ,SUM(IIF([Point] >= 40 AND [Point] < 80, 1, 0)) Point40から79
      ,SUM(IIF([Point] >= 80,                  1, 0)) Point80以上
  FROM [SampleTable]

IIF関数について

IIF関数は 第一引数に 条件を指定でき、条件に一致すれば 第二引数の値を、一致しなければ第三引数の値を返します。IIF は CASE 式の簡略版で、CASE式よりもシンプルに記述できます。
IIF(<条件>, <条件が一致したときに返す値>, <条件が一致しないときに返す値>)

IIF関数を CASE 式で置き換えると、次のようになります。

CASE WHEN <条件> THEN <条件が一致したときに返す値> ELSE <条件が一致しないときに返す値> END

参考資料

検証環境