类别:

聚合函数 (通用)、窗口函数 (通用、窗口框架)

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 值的行。正如 三元逻辑 中所解释的那样,当比较运算符的任何操作数为 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 |
+---------------------------------------------------+
语言: 中文