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
使用 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.
以下语句对 energy 列具有空值的元素进行计数:
SELECT CountIf(readings,'energy IS NULL') FROM sm; (expression) 21 row(s) retrieved.
两个元素的 energy 列包含空值。
五个元素满足条件。
以下语句对 energy 列值等于 1 或 ind 列值等于 0 的元素进行计数:
SELECT CountIf(readings,'energy = 1 or ind = 0') FROM sm; (expression) 51 row(s) retrieved.
五个元素满足条件。
以下语句对从 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.
六个元素满足条件。
以下语句对 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.