SQL 函数

聚合函数

TDengine 支持针对数据的聚合查询。提供支持的聚合和选择函数如下:

COUNT

  1. SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause];

功能说明:统计表/超级表中记录行数或某列的非空值个数。

返回数据类型:长整型 INT64。

应用字段:应用全部字段。

适用于:表、超级表。

使用说明:

  • 可以使用星号(*)来替代具体的字段,使用星号(*)返回全部记录数量。
  • 针对同一表的(不包含 NULL 值)字段查询结果均相同。
  • 如果统计对象是具体的列,则返回该列中非 NULL 值的记录数量。

示例

  1. taos> SELECT COUNT(*), COUNT(voltage) FROM meters;
  2. count(*) | count(voltage) |
  3. ================================================
  4. 9 | 9 |
  5. Query OK, 1 row(s) in set (0.004475s)
  6. taos> SELECT COUNT(*), COUNT(voltage) FROM d1001;
  7. count(*) | count(voltage) |
  8. ================================================
  9. 3 | 3 |
  10. Query OK, 1 row(s) in set (0.001075s)

AVG

  1. SELECT AVG(field_name) FROM tb_name [WHERE clause];

功能说明:统计表/超级表中某列的平均值。

返回数据类型:双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 字段。

适用于:表、超级表。

示例

  1. taos> SELECT AVG(current), AVG(voltage), AVG(phase) FROM meters;
  2. avg(current) | avg(voltage) | avg(phase) |
  3. ====================================================================================
  4. 11.466666751 | 220.444444444 | 0.293333333 |
  5. Query OK, 1 row(s) in set (0.004135s)
  6. taos> SELECT AVG(current), AVG(voltage), AVG(phase) FROM d1001;
  7. avg(current) | avg(voltage) | avg(phase) |
  8. ====================================================================================
  9. 11.733333588 | 219.333333333 | 0.316666673 |
  10. Query OK, 1 row(s) in set (0.000943s)

TWA

  1. SELECT TWA(field_name) FROM tb_name WHERE clause;

功能说明:时间加权平均函数。统计表中某列在一段时间内的时间加权平均。

返回数据类型:双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明

  • 从 2.1.3.0 版本开始,TWA 函数可以在由 GROUP BY 划分出单独时间线的情况下用于超级表(也即 GROUP BY tbname)。

IRATE

  1. SELECT IRATE(field_name) FROM tb_name WHERE clause;

功能说明:计算瞬时增长率。使用时间区间中最后两个样本数据来计算瞬时增长速率;如果这两个值呈递减关系,那么只取最后一个数用于计算,而不是使用二者差值。

返回数据类型:双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明

  • 从 2.1.3.0 版本开始此函数可用,IRATE 可以在由 GROUP BY 划分出单独时间线的情况下用于超级表(也即 GROUP BY tbname)。

SUM

  1. SELECT SUM(field_name) FROM tb_name [WHERE clause];

功能说明:统计表/超级表中某列的和。

返回数据类型:双精度浮点数 Double 和长整型 INT64。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

示例

  1. taos> SELECT SUM(current), SUM(voltage), SUM(phase) FROM meters;
  2. sum(current) | sum(voltage) | sum(phase) |
  3. ================================================================================
  4. 103.200000763 | 1984 | 2.640000001 |
  5. Query OK, 1 row(s) in set (0.001702s)
  6. taos> SELECT SUM(current), SUM(voltage), SUM(phase) FROM d1001;
  7. sum(current) | sum(voltage) | sum(phase) |
  8. ================================================================================
  9. 35.200000763 | 658 | 0.950000018 |
  10. Query OK, 1 row(s) in set (0.000980s)

STDDEV

  1. SELECT STDDEV(field_name) FROM tb_name [WHERE clause];

功能说明:统计表中某列的均方差。

返回数据类型:双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表(从 2.0.15.1 版本开始)

示例

  1. taos> SELECT STDDEV(current) FROM d1001;
  2. stddev(current) |
  3. ============================
  4. 1.020892909 |
  5. Query OK, 1 row(s) in set (0.000915s)

LEASTSQUARES

  1. SELECT LEASTSQUARES(field_name, start_val, step_val) FROM tb_name [WHERE clause];

功能说明:统计表中某列的值是主键(时间戳)的拟合直线方程。start_val 是自变量初始值,step_val 是自变量的步长值。

返回数据类型:字符串表达式(斜率, 截距)。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表。

示例

  1. taos> SELECT LEASTSQUARES(current, 1, 1) FROM d1001;
  2. leastsquares(current, 1, 1) |
  3. =====================================================
  4. {slop:1.000000, intercept:9.733334} |
  5. Query OK, 1 row(s) in set (0.000921s)

选择函数

在使用所有的选择函数的时候,可以同时指定输出 ts 列或标签列(包括 tbname),这样就可以方便地知道被选出的值是源于哪个数据行的。

MIN

  1. SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause];

功能说明:统计表/超级表中某列的值最小值。

返回数据类型:同应用的字段。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

示例

  1. taos> SELECT MIN(current), MIN(voltage) FROM meters;
  2. min(current) | min(voltage) |
  3. ======================================
  4. 10.20000 | 218 |
  5. Query OK, 1 row(s) in set (0.001765s)
  6. taos> SELECT MIN(current), MIN(voltage) FROM d1001;
  7. min(current) | min(voltage) |
  8. ======================================
  9. 10.30000 | 218 |
  10. Query OK, 1 row(s) in set (0.000950s)

MAX

  1. SELECT MAX(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列的值最大值。

返回数据类型:同应用的字段。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

示例

  1. taos> SELECT MAX(current), MAX(voltage) FROM meters;
  2. max(current) | max(voltage) |
  3. ======================================
  4. 13.40000 | 223 |
  5. Query OK, 1 row(s) in set (0.001123s)
  6. taos> SELECT MAX(current), MAX(voltage) FROM d1001;
  7. max(current) | max(voltage) |
  8. ======================================
  9. 12.60000 | 221 |
  10. Query OK, 1 row(s) in set (0.000987s)

FIRST

  1. SELECT FIRST(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列的值最先写入的非 NULL 值。

返回数据类型:同应用的字段。

应用字段:所有字段。

适用于:表、超级表。

使用说明:

  • 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(*);
  • 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
  • 如果结果集中所有列全部为 NULL 值,则不返回结果。

示例

  1. taos> SELECT FIRST(*) FROM meters;
  2. first(ts) | first(current) | first(voltage) | first(phase) |
  3. =========================================================================================
  4. 2018-10-03 14:38:04.000 | 10.20000 | 220 | 0.23000 |
  5. Query OK, 1 row(s) in set (0.004767s)
  6. taos> SELECT FIRST(current) FROM d1002;
  7. first(current) |
  8. =======================
  9. 10.20000 |
  10. Query OK, 1 row(s) in set (0.001023s)

LAST

  1. SELECT LAST(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列的值最后写入的非 NULL 值。

返回数据类型:同应用的字段。

应用字段:所有字段。

适用于:表、超级表。

使用说明:

  • 如果要返回各个列的最后(时间戳最大)一个非 NULL 值,可以使用 LAST(*);
  • 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;如果结果集中所有列全部为 NULL 值,则不返回结果。
  • 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。

示例

  1. taos> SELECT LAST(*) FROM meters;
  2. last(ts) | last(current) | last(voltage) | last(phase) |
  3. ========================================================================================
  4. 2018-10-03 14:38:16.800 | 12.30000 | 221 | 0.31000 |
  5. Query OK, 1 row(s) in set (0.001452s)
  6. taos> SELECT LAST(current) FROM d1002;
  7. last(current) |
  8. =======================
  9. 10.30000 |
  10. Query OK, 1 row(s) in set (0.000843s)

TOP

  1. SELECT TOP(field_name, K) FROM { tb_name | stb_name } [WHERE clause];

功能说明: 统计表/超级表中某列的值最大 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。

返回数据类型:同应用的字段。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明:

  • k值取值范围 1≤k≤100;
  • 系统同时返回该记录关联的时间戳列;
  • 限制:TOP 函数不支持 FILL 子句。

示例

  1. taos> SELECT TOP(current, 3) FROM meters;
  2. ts | top(current, 3) |
  3. =================================================
  4. 2018-10-03 14:38:15.000 | 12.60000 |
  5. 2018-10-03 14:38:16.600 | 13.40000 |
  6. 2018-10-03 14:38:16.800 | 12.30000 |
  7. Query OK, 3 row(s) in set (0.001548s)
  8. taos> SELECT TOP(current, 2) FROM d1001;
  9. ts | top(current, 2) |
  10. =================================================
  11. 2018-10-03 14:38:15.000 | 12.60000 |
  12. 2018-10-03 14:38:16.800 | 12.30000 |
  13. Query OK, 2 row(s) in set (0.000810s)

BOTTOM

  1. SELECT BOTTOM(field_name, K) FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。

返回数据类型:同应用的字段。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明:

  • k值取值范围 1≤k≤100;
  • 系统同时返回该记录关联的时间戳列;
  • 限制:BOTTOM 函数不支持 FILL 子句。

示例

  1. taos> SELECT BOTTOM(voltage, 2) FROM meters;
  2. ts | bottom(voltage, 2) |
  3. ===============================================
  4. 2018-10-03 14:38:15.000 | 218 |
  5. 2018-10-03 14:38:16.650 | 218 |
  6. Query OK, 2 row(s) in set (0.001332s)
  7. taos> SELECT BOTTOM(current, 2) FROM d1001;
  8. ts | bottom(current, 2) |
  9. =================================================
  10. 2018-10-03 14:38:05.000 | 10.30000 |
  11. 2018-10-03 14:38:16.800 | 12.30000 |
  12. Query OK, 2 row(s) in set (0.000793s)

PERCENTILE

  1. SELECT PERCENTILE(field_name, P) FROM { tb_name } [WHERE clause];

功能说明:统计表中某列的值百分比分位数。

返回数据类型: 双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表。

使用说明P值取值范围 0≤P≤100,为 0 的时候等同于 MIN,为 100 的时候等同于 MAX。

示例

  1. taos> SELECT PERCENTILE(current, 20) FROM d1001;
  2. percentile(current, 20) |
  3. ============================
  4. 11.100000191 |
  5. Query OK, 1 row(s) in set (0.000787s)

APERCENTILE

  1. SELECT APERCENTILE(field_name, P[, algo_type])
  2. FROM { tb_name | stb_name } [WHERE clause]

功能说明:统计表/超级表中指定列的值百分比分位数,与 PERCENTILE 函数相似,但是返回近似结果。

返回数据类型: 双精度浮点数 Double。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明

  • P值有效取值范围 0≤P≤100,为 0 的时候等同于 MIN,为 100 的时候等同于 MAX;
  • algo_type的有效输入:defaultt-digest
  • 用于指定计算近似分位数的算法。可不提供第三个参数的输入,此时将使用 default 的算法进行计算,即 apercentile(column_name, 50, “default”) 与 apercentile(column_name, 50) 等价。
  • 当使用“t-digest”参数的时候,将使用 t-digest 方式采样计算近似分位数。但该参数指定计算算法的功能从 2.2.0.x 版本开始支持,2.2.0.0 之前的版本不支持指定使用算法的功能。

嵌套子查询支持:适用于内层查询和外层查询。

  1. taos> SELECT APERCENTILE(current, 20) FROM d1001;
  2. apercentile(current, 20) |
  3. ============================
  4. 10.300000191 |
  5. Query OK, 1 row(s) in set (0.000645s)
  6. taos> select apercentile (count, 80, 'default') from stb1;
  7. apercentile (c0, 80, 'default') |
  8. ==================================
  9. 601920857.210056424 |
  10. Query OK, 1 row(s) in set (0.012363s)
  11. taos> select apercentile (count, 80, 't-digest') from stb1;
  12. apercentile (c0, 80, 't-digest') |
  13. ===================================
  14. 605869120.966666579 |
  15. Query OK, 1 row(s) in set (0.011639s)

LAST_ROW

  1. SELECT LAST_ROW(field_name) FROM { tb_name | stb_name };

功能说明:返回表/超级表的最后一条记录。

返回数据类型:同应用的字段。

应用字段:所有字段。

适用于:表、超级表。

使用说明

  • 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
  • 不能与 INTERVAL 一起使用。

示例

  1. taos> SELECT LAST_ROW(current) FROM meters;
  2. last_row(current) |
  3. =======================
  4. 12.30000 |
  5. Query OK, 1 row(s) in set (0.001238s)
  6. taos> SELECT LAST_ROW(current) FROM d1002;
  7. last_row(current) |
  8. =======================
  9. 10.30000 |
  10. Query OK, 1 row(s) in set (0.001042s)

INTERP [2.3.1 及之后的版本]

  1. SELECT INTERP(field_name) FROM { tb_name | stb_name } [WHERE where_condition] [ RANGE(timestamp1,timestamp2) ] [EVERY(interval)] [FILL ({ VALUE | PREV | NULL | LINEAR | NEXT})];

功能说明:返回表/超级表的指定时间截面指定列的记录值(插值)。

返回数据类型:同字段类型。

应用字段:数值型字段。

适用于:表、超级表、嵌套查询。

使用说明

  • INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
  • INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
  • INTERP 的输出时间范围根据 RANGE(timestamp1,timestamp2)字段来指定,需满足 timestamp1<=timestamp2。其中 timestamp1(必选值)为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2(必选值)为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。如果没有指定 RANGE,那么满足过滤条件的输入数据中第一条记录的 timestamp 即为 timestamp1,最后一条记录的 timestamp 即为 timestamp2,同样也满足 timestamp1 <= timestamp2。
  • INTERP 根据 EVERY 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(EVERY 值)进行插值。如果没有指定 EVERY,则默认窗口大小为无穷大,即从 timestamp1 开始只有一个窗口。
  • INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值,如果没有 FILL 字段则默认不插值,即输出为原始记录值或不输出(原始记录不存在)。
  • INTERP 只能在一个时间序列内进行插值,因此当作用于超级表时必须跟 group by tbname 一起使用,当作用嵌套查询外层时内层子查询不能含 GROUP BY 信息。
  • INTERP 的插值结果不受 ORDER BY timestamp 的影响,ORDER BY timestamp 只影响输出结果的排序。

SQL示例(基于文档中广泛使用的电表 schema )

  • 单点线性插值
  1. taos> SELECT INTERP(current) FROM t1 RANGE('2017-7-14 18:40:00','2017-7-14 18:40:00') FILL(LINEAR);
  • 在2017-07-14 18:00:00到2017-07-14 19:00:00间每隔5秒钟进行取值(不插值)
  1. taos> SELECT INTERP(current) FROM t1 RANGE('2017-7-14 18:00:00','2017-7-14 19:00:00') EVERY(5s);
  • 在2017-07-14 18:00:00到2017-07-14 19:00:00间每隔5秒钟进行线性插值
  1. taos> SELECT INTERP(current) FROM t1 RANGE('2017-7-14 18:00:00','2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR);
  • 在所有时间范围内每隔 5 秒钟进行向后插值
  1. taos> SELECT INTERP(current) FROM t1 EVERY(5s) FILL(NEXT);
  • 根据 2017-07-14 17:00:00 到 2017-07-14 20:00:00 间的数据进行从 2017-07-14 18:00:00 到 2017-07-14 19:00:00 间每隔 5 秒钟进行线性插值
  1. taos> SELECT INTERP(current) FROM t1 where ts >= '2017-07-14 17:00:00' and ts <= '2017-07-14 20:00:00' RANGE('2017-7-14 18:00:00''2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR);

INTERP [2.3.1 之前的版本]

  1. SELECT INTERP(field_name) FROM { tb_name | stb_name } WHERE ts='timestamp' [FILL ({ VALUE | PREV | NULL | LINEAR | NEXT})];

功能说明:返回表/超级表的指定时间截面、指定字段的记录。

返回数据类型:同字段类型。

应用字段:数值型字段。

适用于:表、超级表。

使用说明:

  • 从 2.0.15.0 及以后版本可用
  • INTERP 必须指定时间断面,如果该时间断面不存在直接对应的数据,那么会根据 FILL 参数的设定进行插值。此外,条件语句里面可附带筛选条件,例如标签、tbname。
  • INTERP 查询要求查询的时间区间必须位于数据集合(表)的所有记录的时间范围之内。如果给定的时间戳位于时间范围之外,即使有插值指令,仍然不返回结果。
  • 单个 INTERP 函数查询只能够针对一个时间点进行查询,如果需要返回等时间间隔的断面数据,可以通过 INTERP 配合 EVERY 的方式来进行查询处理(而不是使用 INTERVAL),其含义是每隔固定长度的时间进行插值

示例

  1. taos> SELECT INTERP(*) FROM meters WHERE ts='2017-7-14 18:40:00.004';
  2. interp(ts) | interp(current) | interp(voltage) | interp(phase) |
  3. ==========================================================================================
  4. 2017-07-14 18:40:00.004 | 9.84020 | 216 | 0.32222 |
  5. Query OK, 1 row(s) in set (0.002652s)

如果给定的时间戳无对应的数据,在不指定插值生成策略的情况下,不会返回结果,如果指定了插值策略,会根据插值策略返回结果。

  1. taos> SELECT INTERP(*) FROM meters WHERE tbname IN ('d636') AND ts='2017-7-14 18:40:00.005';
  2. Query OK, 0 row(s) in set (0.004022s)
  3. taos> SELECT INTERP(*) FROM meters WHERE tbname IN ('d636') AND ts='2017-7-14 18:40:00.005' FILL(PREV);
  4. interp(ts) | interp(current) | interp(voltage) | interp(phase) |
  5. ==========================================================================================
  6. 2017-07-14 18:40:00.005 | 9.88150 | 217 | 0.32500 |
  7. Query OK, 1 row(s) in set (0.003056s)

如下所示代码表示在时间区间 ['2017-7-14 18:40:00', '2017-7-14 18:40:00.014'] 中每隔 5 毫秒 进行一次断面计算。

  1. taos> SELECT INTERP(current) FROM d636 WHERE ts>='2017-7-14 18:40:00' AND ts<='2017-7-14 18:40:00.014' EVERY(5a);
  2. ts | interp(current) |
  3. =================================================
  4. 2017-07-14 18:40:00.000 | 10.04179 |
  5. 2017-07-14 18:40:00.010 | 10.16123 |
  6. Query OK, 2 row(s) in set (0.003487s)

计算函数

DIFF

  1. SELECT {DIFF(field_name, ignore_negative) | DIFF(field_name)} FROM tb_name [WHERE clause];

功能说明:统计表中某列的值与前一行对应值的差。 ignore_negative 取值为 0|1 , 可以不填,默认值为 0. 不忽略负值。ignore_negative 为 1 时表示忽略负数。

返回结果数据类型:同应用字段。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明:

  • 输出结果行数是范围内总行数减一,第一行没有结果输出。
  • 从 2.1.3.0 版本开始,DIFF 函数可以在由 GROUP BY 划分出单独时间线的情况下用于超级表(也即 GROUP BY tbname)。

示例

  1. taos> SELECT DIFF(current) FROM d1001;
  2. ts | diff(current) |
  3. =================================================
  4. 2018-10-03 14:38:15.000 | 2.30000 |
  5. 2018-10-03 14:38:16.800 | -0.30000 |
  6. Query OK, 2 row(s) in set (0.001162s)

DERIVATIVE

  1. SELECT DERIVATIVE(field_name, time_interval, ignore_negative) FROM tb_name [WHERE clause];

功能说明:统计表中某列数值的单位变化率。其中单位时间区间的长度可以通过 time_interval 参数指定,最小可以是 1 秒(1s);ignore_negative 参数的值可以是 0 或 1,为 1 时表示忽略负值。

返回数据类型:双精度浮点数。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表

使用说明:

  • 从 2.1.3.0 及以后版本可用;输出结果行数是范围内总行数减一,第一行没有结果输出。
  • DERIVATIVE 函数可以在由 GROUP BY 划分出单独时间线的情况下用于超级表(也即 GROUP BY tbname)。

示例

  1. taos> select derivative(current, 10m, 0) from t1;
  2. ts | derivative(current, 10m, 0) |
  3. ========================================================
  4. 2021-08-20 10:11:22.790 | 0.500000000 |
  5. 2021-08-20 11:11:22.791 | 0.166666620 |
  6. 2021-08-20 12:11:22.791 | 0.000000000 |
  7. 2021-08-20 13:11:22.792 | 0.166666620 |
  8. 2021-08-20 14:11:22.792 | -0.666666667 |
  9. Query OK, 5 row(s) in set (0.004883s)

SPREAD

  1. SELECT SPREAD(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列的最大值和最小值之差。

返回数据类型:双精度浮点数。

应用字段:不能应用在 binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明:可用于 TIMESTAMP 字段,此时表示记录的时间覆盖范围。

示例

  1. taos> SELECT SPREAD(voltage) FROM meters;
  2. spread(voltage) |
  3. ============================
  4. 5.000000000 |
  5. Query OK, 1 row(s) in set (0.001792s)
  6. taos> SELECT SPREAD(voltage) FROM d1001;
  7. spread(voltage) |
  8. ============================
  9. 3.000000000 |
  10. Query OK, 1 row(s) in set (0.000836s)

CEIL

  1. SELECT CEIL(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:获得指定列的向上取整数的结果。

返回结果类型:与指定列的原始数据类型一致。例如,如果指定列的原始数据类型为 Float,那么返回的数据类型也为 Float;如果指定列的原始数据类型为 Double,那么返回的数据类型也为 Double。

适用数据类型:不能应用在 timestamp、binary、nchar、bool 类型字段上;在超级表查询中使用时,不能应用在 tag 列,无论 tag 列的类型是什么类型。

适用于: 普通表、超级表。

嵌套子查询支持:适用于内层查询和外层查询。

使用说明:

  • 支持 +、-、*、/ 运算,如 ceil(col1) + ceil(col2)。
  • 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。

FLOOR

  1. SELECT FLOOR(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:获得指定列的向下取整数的结果。
其他使用说明参见 CEIL 函数描述。

ROUND

  1. SELECT ROUND(field_name) FROM { tb_name | stb_name } [WHERE clause];

功能说明:获得指定列的四舍五入的结果。
其他使用说明参见 CEIL 函数描述。

CSUM

  1. SELECT CSUM(field_name) FROM { tb_name | stb_name } [WHERE clause]

功能说明:累加和(Cumulative sum),输出行与输入行数相同。

返回结果类型: 输入列如果是整数类型返回值为长整型 (int64_t),浮点数返回值为双精度浮点数(Double)。无符号整数类型返回值为无符号长整型(uint64_t)。 返回结果中同时带有每行记录对应的时间戳。

适用数据类型:不能应用在 timestamp、binary、nchar、bool 类型字段上;在超级表查询中使用时,不能应用在标签之上。

嵌套子查询支持: 适用于内层查询和外层查询。

使用说明

  • 不支持 +、-、*、/ 运算,如 csum(col1) + csum(col2)。
  • 只能与聚合(Aggregation)函数一起使用。 该函数可以应用在普通表和超级表上。
  • 使用在超级表上的时候,需要搭配 Group by tbname使用,将结果强制规约到单个时间线。

支持版本: 从2.3.0.x开始支持

MAVG

  1. SELECT MAVG(field_name, K) FROM { tb_name | stb_name } [WHERE clause]

功能说明: 计算连续 k 个值的移动平均数(moving average)。如果输入行数小于 k,则无结果输出。参数 k 的合法输入范围是 1≤ k ≤ 1000。

返回结果类型: 返回双精度浮点数类型。

适用数据类型: 不能应用在 timestamp、binary、nchar、bool 类型上;在超级表查询中使用时,不能应用在标签之上。

嵌套子查询支持: 适用于内层查询和外层查询。

使用说明

  • 不支持 +、-、*、/ 运算,如 mavg(col1, k1) + mavg(col2, k1);
  • 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用;
  • 该函数可以应用在普通表和超级表上;使用在超级表上的时候,需要搭配 Group by tbname使用,将结果强制规约到单个时间线。

支持版本: 从2.3.0.x开始支持

SAMPLE

  1. SELECT SAMPLE(field_name, K) FROM { tb_name | stb_name } [WHERE clause]

功能说明: 获取数据的 k 个采样值。参数 k 的合法输入范围是 1≤ k ≤ 1000。

返回结果类型: 同原始数据类型, 返回结果中带有该行记录的时间戳。

适用数据类型: 在超级表查询中使用时,不能应用在标签之上。

嵌套子查询支持: 适用于内层查询和外层查询。

使用说明

  • 不能参与表达式计算;该函数可以应用在普通表和超级表上;
  • 使用在超级表上的时候,需要搭配 Group by tbname 使用,将结果强制规约到单个时间线。

支持版本: 从2.3.0.x开始支持

四则运算

  1. SELECT field_name [+|-|*|/|%][Value|field_name] FROM { tb_name | stb_name } [WHERE clause];

功能说明:统计表/超级表中某列或多列间的值加、减、乘、除、取余计算结果。

返回数据类型:双精度浮点数。

应用字段:不能应用在 timestamp、binary、nchar、bool 类型字段。

适用于:表、超级表。

使用说明

  • 支持两列或多列之间进行计算,可使用括号控制计算优先级;
  • NULL 字段不参与计算,如果参与计算的某行中包含 NULL,该行的计算结果为 NULL。
  1. taos> SELECT current + voltage * phase FROM d1001;
  2. (current+(voltage*phase)) |
  3. ============================
  4. 78.190000713 |
  5. 84.540003240 |
  6. 80.810000718 |
  7. Query OK, 3 row(s) in set (0.001046s)

示例

  1. taos> select ts,dbig from statef2;
  2. ts | dbig |
  3. ========================================================
  4. 2021-10-15 00:31:33.000000000 | 1 |
  5. 2021-10-17 00:31:31.000000000 | NULL |
  6. 2021-12-24 00:31:34.000000000 | 2 |
  7. 2022-01-01 08:00:05.000000000 | 19 |
  8. 2022-01-01 08:00:06.000000000 | NULL |
  9. 2022-01-01 08:00:07.000000000 | 9 |
  10. Query OK, 6 row(s) in set (0.002977s)
  11. taos> select stateCount(dbig,GT,2) from statef2;
  12. ts | dbig | statecount(dbig,gt,2) |
  13. ================================================================================
  14. 2021-10-15 00:31:33.000000000 | 1 | -1 |
  15. 2021-10-17 00:31:31.000000000 | NULL | NULL |
  16. 2021-12-24 00:31:34.000000000 | 2 | -1 |
  17. 2022-01-01 08:00:05.000000000 | 19 | 1 |
  18. 2022-01-01 08:00:06.000000000 | NULL | NULL |
  19. 2022-01-01 08:00:07.000000000 | 9 | 2 |
  20. Query OK, 6 row(s) in set (0.002791s)