COUNT_IF¶
返回满足条件的记录数,如果没有记录满足条件,则返回 NULL。
- 另请参阅:
语法¶
聚合函数
COUNT_IF( <condition> )
窗口函数
COUNT_IF( <condition> )
OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ ASC | DESC ] [ <window_frame> ] ] )
有关 window_frame
语法的详细信息,请参阅 窗口框架语法和用法。
实参¶
condition
该条件是一个应计算为 BOOLEAN 值(True、False 或 NULL)的表达式。
expr1
要分区的列(如果希望将结果拆分为多个窗口)。
expr2
要对每个窗口进行排序的列。请注意,这不同于任何用于对最终结果集进行排序的 ORDER BY 子句。
返回¶
如果函数没有返回 NULL,返回值的数据类型为 NUMBER。
使用说明¶
当此函数作为窗口函数调用时:
示例¶
本节中的示例演示了如何使用 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);SELECT * FROM basic_example ORDER BY i_col;+-------+-------+ | I_COL | J_COL | |-------+-------| | 11 | 101 | | 11 | 102 | | 11 | NULL | | 12 | 101 | | NULL | 101 | | NULL | 102 | +-------+-------+
以下示例为条件传入 TRUE
,这将返回表中所有行的计数:
SELECT COUNT_IF(TRUE) FROM basic_example;+----------------+ | COUNT_IF(TRUE) | |----------------| | 6 | +----------------+
以下示例返回 J_COL
中的值大于 I_COL
中的值的行数:
SELECT COUNT_IF(j_col > i_col) FROM basic_example;+-------------------------+ | 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;+---------------------------------------------------+ | COUNT_IF(I_COL IS NOT NULL AND J_COL IS NOT NULL) | |---------------------------------------------------| | 3 | +---------------------------------------------------+