カテゴリ:

集計関数 (一般)、 ウィンドウ関数 (一般、ウィンドウフレーム)

COUNT_IF

条件を満たす記録の数を返します。条件を満たす記録がない場合は NULL を返します。

こちらもご参照ください。

COUNT

構文

集計関数

COUNT_IF( <condition> )
Copy

ウィンドウ関数

COUNT_IF( <condition> )
    OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
Copy

window_frame 構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。

引数

condition

条件は、 BOOLEAN 値(True、False、または NULL)に評価される必要がある式

expr1

結果を複数のウィンドウに分割する場合は、パーティション化する列です。

expr2

各ウィンドウを並べ替える列です。これは、最終結果セットを順序付けるための ORDER BY 句とは別のものです。

戻り値

関数が NULL を返さない場合、戻り値のデータ型は NUMBER になります。

使用上の注意

  • この関数がウィンドウ関数として呼び出される場合、

    • OVER()句内で ORDER BY サブ句を使用する場合、ウィンドウフレームを使用する必要があります。ウィンドウフレームが指定されていない場合、デフォルトは次の累積ウィンドウフレームです。

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      構文や例を含むウィンドウフレームの詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。暗黙的なウィンドウフレームの詳細については、 ウィンドウフレームの使用上の注意 をご参照ください。

このセクションの例では、 COUNT_IF 関数の使用方法を示しています。

次のステートメントでは、例で使用するテーブルを設定します。

CREATE TABLE basic_example (i_col INTEGER, j_col INTEGER);
INSERT INTO basic_example VALUES
    (11,101), (11,102), (11,NULL), (12,101), (NULL,101), (NULL,102);
Copy
SELECT *
    FROM basic_example
    ORDER BY i_col;
Copy
+-------+-------+
| I_COL | J_COL |
|-------+-------|
|    11 |   101 |
|    11 |   102 |
|    11 |  NULL |
|    12 |   101 |
|  NULL |   101 |
|  NULL |   102 |
+-------+-------+

次の例では、条件の TRUE を渡し、テーブルにあるすべての行の数を返します。

SELECT COUNT_IF(TRUE) FROM basic_example;
Copy
+----------------+
| COUNT_IF(TRUE) |
|----------------|
|              6 |
+----------------+

次の例では、 J_COL の値が I_COL の値より大きい行の数を返します。

SELECT COUNT_IF(j_col > i_col) FROM basic_example;
Copy
+-------------------------+
| COUNT_IF(J_COL > I_COL) |
|-------------------------|
|                       3 |
+-------------------------+

上記の例では、カウントに NULL 値を持つ行が含まれていないことに注意してください。 3値論理 で説明したように、比較演算子のオペランドが NULL の場合、結果は NULL となり、 COUNT_IF で指定された条件を満たしません。

次の例は、 NULL 値を含まない行の数を返すことを示しています。

SELECT COUNT_IF(i_col IS NOT NULL AND j_col IS NOT NULL) FROM basic_example;
Copy
+---------------------------------------------------+
| COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) |
|---------------------------------------------------|
|                                                 3 |
+---------------------------------------------------+