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.