SQL 函数

聚合函数

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

  • COUNT

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

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

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

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

    适用于:表、超级表。

    说明:

    1)可以使用星号来替代具体的字段,使用星号()返回全部记录数量。

    2)针对同一表的(不包含NULL值)字段查询结果均相同。

    3)如果统计对象是具体的列,则返回该列中非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类型字段。

    适用于:表。

  • 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)

选择函数

  • 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值。

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

    应用字段:所有字段。

    说明:

    1)如果要返回各个列的首个(时间戳最小)非NULL值,可以使用FIRST(*);

    2) 如果结果集中的某列全部为NULL值,则该列的返回结果也是NULL;

    3) 如果结果集中所有列全部为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值。

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

    应用字段:所有字段。

    说明:

    1)如果要返回各个列的最后(时间戳最大)一个非NULL值,可以使用LAST(*);

    2)如果结果集中的某列全部为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类型字段。

    说明:

    1)k值取值范围1≤k≤100;

    2)系统同时返回该记录关联的时间戳列。

    示例:

    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类型字段。

    说明:

    1)k值取值范围1≤k≤100;

    2)系统同时返回该记录关联的时间戳列。

    示例:

    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) FROM { tb_name | stb_name } [WHERE clause];

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

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

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

    说明:P值取值范围0≤P≤100,为0的时候等同于MIN,为100的时候等同于MAX。推荐使用APERCENTILE函数,该函数性能远胜于PERCENTILE函数

    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)
  • LAST_ROW

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

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

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

    应用字段:所有字段。

    说明:与last函数不同,last_row不支持时间范围限制,强制返回最后一条记录。

    示例:

    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)

计算函数

  • DIFF

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

    功能说明:统计表中某列的值与前一行对应值的差。

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

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

    说明:输出结果行数是范围内总行数减一,第一行没有结果输出。

    示例:

    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)
  • 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)
  • 四则运算

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

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

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

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

    说明:

    1)支持两列或多列之间进行计算,可使用括号控制计算优先级;

    2)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)