聚合函数

聚合函数是多对一函数。它们对一组值进行聚合计算,得到单个聚合结果。

除了 COUNT(), COUNT_IF()之外,其他所有聚合函数都忽略空值,并在没有输入行或所有值为空时返回空值。 例如,SUM() 返回 null 而不是零,而 AVG() 在计数中不包括 null 值。

IoTDB 支持的聚合函数如下:

函数名 功能描述 允许的输入类型 必要的属性参数 输出类型
SUM 求和。 INT32 INT64 FLOAT DOUBLE 无 DOUBLE
COUNT 计算数据点数。 所有类型 无 INT64
AVG 求平均值。 INT32 INT64 FLOAT DOUBLE 无 DOUBLE
EXTREME 求具有最大绝对值的值。如果正值和负值的最大绝对值相等,则返回正值。 INT32 INT64 FLOAT DOUBLE 无 与输入类型一致
MAX_VALUE 求最大值。 INT32 INT64 FLOAT DOUBLE 无 与输入类型一致
MIN_VALUE 求最小值。 INT32 INT64 FLOAT DOUBLE 无 与输入类型一致
FIRST_VALUE 求时间戳最小的值。 所有类型 无 与输入类型一致
LAST_VALUE 求时间戳最大的值。 所有类型 无 与输入类型一致
MAX_TIME 求最大时间戳。 所有类型 无 Timestamp
MIN_TIME 求最小时间戳。 所有类型 无 Timestamp
COUNT_IF 求数据点连续满足某一给定条件,且满足条件的数据点个数(用keep表示)满足指定阈值的次数。 BOOLEAN [keep >=/>/=/!=/</<=]threshold:被指定的阈值或阈值条件,若只使用threshold则等价于keep >= threshold,threshold类型为INT64 ignoreNull:可选,默认为true;为true表示忽略null值,即如果中间出现null值,直接忽略,不会打断连续性;为false表示不忽略null值,即如果中间出现null值,会打断连续性 INT64

COUNT_IF

语法

1. count_if(predicate, [keep >=/>/=/!=/</<=]threshold[, 'ignoreNull'='true/false'])

predicate: 返回类型为BOOLEAN的合法表达式

threshold 及 ignoreNull 用法见上表

注意: count_if 当前暂不支持与 group by time 的 SlidingWindow 一起使用

使用示例

原始数据
1. +-----------------------------+-------------+-------------+
2. |                         Time|root.db.d1.s1|root.db.d1.s2|
3. +-----------------------------+-------------+-------------+
4. |1970-01-01T08:00:00.001+08:00|            0|            0|
5. |1970-01-01T08:00:00.002+08:00|         null|            0|
6. |1970-01-01T08:00:00.003+08:00|            0|            0|
7. |1970-01-01T08:00:00.004+08:00|            0|            0|
8. |1970-01-01T08:00:00.005+08:00|            1|            0|
9. |1970-01-01T08:00:00.006+08:00|            1|            0|
10. |1970-01-01T08:00:00.007+08:00|            1|            0|
11. |1970-01-01T08:00:00.008+08:00|            0|            0|
12. |1970-01-01T08:00:00.009+08:00|            0|            0|
13. |1970-01-01T08:00:00.010+08:00|            0|            0|
14. +-----------------------------+-------------+-------------+
不使用ignoreNull参数(忽略null)

SQL:

1. select count_if(s1=0 & s2=0, 3), count_if(s1=1 & s2=0, 3) from root.db.d1

输出:

1. +--------------------------------------------------+--------------------------------------------------+
2. |count_if(root.db.d1.s1 = 0 & root.db.d1.s2 = 0, 3)|count_if(root.db.d1.s1 = 1 & root.db.d1.s2 = 0, 3)|
3. +--------------------------------------------------+--------------------------------------------------+
4. |                                                 2|                                                 1|
5. +--------------------------------------------------+--------------------------------------------------
使用ignoreNull参数

SQL:

1. select count_if(s1=0 & s2=0, 3, 'ignoreNull'='false'), count_if(s1=1 & s2=0, 3, 'ignoreNull'='false') from root.db.d1

输出:

1. +------------------------------------------------------------------------+------------------------------------------------------------------------+
2. |count_if(root.db.d1.s1 = 0 & root.db.d1.s2 = 0, 3, "ignoreNull"="false")|count_if(root.db.d1.s1 = 1 & root.db.d1.s2 = 0, 3, "ignoreNull"="false")|
3. +------------------------------------------------------------------------+------------------------------------------------------------------------+
4. |                                                                       1|                                                                       1|
5. +------------------------------------------------------------------------+------------------------------------------------------------------------+