CountIf 函数

CountIf 函数对与简单算术表达式的条件匹配的元素进行计数。

语法

CountIf (
	ts          TimeSeries,
	expr        lvarchar,
	begin_stamp datetime year to fraction(5) default null,
	end_stamp   datetime year to fraction(5) default null) 
returns integer

CountIf (
	ts          TimeSeries,
	col         lvarchar,
	op          lvarchar,
	value       lvarchar,
	begin_stamp datetime year to fraction(5) default null,
	end_stamp   datetime year to fraction(5) default null) 
returns integer

CountIf (
	ts          TimeSeries,
	col         lvarchar,
	op          lvarchar,
	value       decimal,
	begin_stamp datetime year to fraction(5) default null,
	end_stamp   datetime year to fraction(5) default null) 
returns integer
表达式语法
ts
要计数的时间系列。
expr
通过将元素值与数字或字符串进行比较来过滤元素的表达式。可以使用 AND 或 OR 运算符来组合多个表达式,并使用圆括号来嵌套多个表达式。 在表达式中使用以下参数:
expr_col
TimeSeries 数据类型中列的名称。
expr_value
比较中使用的值。可以为数字、字符串或 NULL。
logical_operator
AND 或 OR 运算符。
begin_stamp(可选)
范围的起始点。可为 NULL。缺省情况下,begin_stamp 是时间系列的起始点。
end_stamp(可选)
范围的结束点。可为 NULL。缺省情况下,end_stamp 是时间系列的结束点。
col
TimeSeries 数据类型中列的名称。可使用词组 IS NULL OR 作为前缀。必须用引号括起。
op
运算符。可以为 <、<=、=、!=、>= 或 >。必须用引号括起。
value
比较中使用的值。可以为数字、字符串或 NULL。字符串值必须用引号括起。

用法

使用 CountIf 函数可确定有多少元素满足基于 TimeSeries 子类型中列值的条件。 例如,可以对多个列应用条件,或确定某个列是否具有任何空值。可以选择时间范围或查询整个时间系列。

返回结果

一个整数,表示满足条件的元素数。

示例

示例基于以下时间系列:

INSERT INTO CalendarTable(c_name, c_calendar)
  VALUES ('sm_15min',
          'startdate(2011-07-11 00:00:00.00000),
           pattstart(2011-07-11 00:00:00.00000),
           pattern({1 on,14 off}, minute)');
1 row(s) inserted.

EXECUTE PROCEDURE TSContainerCreate('sm0', 'tsspace0', 'sm_row', 0, 0);
Routine executed.

CREATE ROW TYPE sm_row
(
        t datetime year to fraction(5),
        energy smallint,
        ind    smallint
);
Row type created.

CREATE TABLE sm (
        meter_id varchar(255) primary key,
        readings TimeSeries(sm_row)
) IN tsspace;
Table created.

INSERT INTO sm VALUES ('met0', 'origin(2011-07-11 00:00:00.00000),
                       calendar(sm_15min),container(sm0),threshold(0),
                       regular,[(1,0),(2,1),(3,0),(4,2),(5,3),(6,9),
                       (7,3),(8,0),(9,0),(-123,0),(NULL,0),(NULL,0),
                       (400,3)]');
1 row(s) inserted.

示例 1:列为空时对元素计数

以下语句对 energy 列具有空值的元素进行计数:

SELECT CountIf(readings,'energy IS NULL') 
   FROM sm;

(expression)   
          21 row(s) retrieved.

两个元素的 energy 列包含空值。

五个元素满足条件。

示例 2:对与两列之一的值匹配的元素计数

以下语句对 energy 列值等于 1ind 列值等于 0 的元素进行计数:

SELECT CountIf(readings,'energy = 1 or ind = 0') 
   FROM sm;

(expression)   
           51 row(s) retrieved.

五个元素满足条件。

示例 3:对特定时间范围内的元素计数

以下语句对从 2011-07-11 01:00:00.00000 到时间系列结束点的范围内,energy 列值大于或等于 5 的元素进行计数:

SELECT CountIf(readings,'energy >= 5','2011-07-11 01:00:00.00000'::datetime 
               year to fraction(5)) 
  FROM sm;

(expression)   
           61 row(s) retrieved.

六个元素满足条件。

示例 4:对大于某个值的元素计数

以下语句对 energy 列值大于 -128 的元素进行计数:

SELECT CountIf(readings,'energy > -128') 
   FROM sm;

(expression)   
          11

1 row(s) retrieved.

以下语句等同于上一个语句,但格式是将不同参数用于列名、运算符和比较值,而不是使用单一表达式参数:

SELECT CountIf(readings,'energy', '>', -128) 
   FROM sm;

(expression)   
          11

1 row(s) retrieved.