Skip to content

聚合函数列表

count (计数)

Counts the number of rows or not-NULL values.
统计行数或非空值的数量。

语法

  • count(expr)
  • count(*)

结果类型

Int64

sum (求和)

语法

  • sum(expr)

结果类型

float64 (or "null" if no rows)

avg (平均值)

语法

  • avg(expr)

结果类型

float64(如果没有输入行,则为“null”)

min/max (最小值/最大值)

语法

  • min(expr)
  • max(expr)

结果类型

expr 相同(如果没有输入行,则为“null”)

first/last (第一个/最后一个)

返回第一个或最后一个具有非空值的 expr,按主时间列排序。

如果有多个 expr 参数,则为每个返回第一个非空值,这些值可能来自不同的行。

_time 参数是可选的,默认为 false。如果 _timetrue,则时间列将包含在每个 expr 的输出中。

语法

  • first(expr1<, expr2 ...> <, _time=false>)
  • last(expr1<, expr2 ...> <, _time=false>)

示例

sql
first(spd)

返回:

csv
| first(spd) |
| ---------- |
| 1          |
sql
first(spd, vin, i)

返回:

csv
| first(spd) | first(vin) | first(i) |
| ---------- | ---------- | -------- |
| 1          | LJNEFE2T1J | 0        |
sql
first(spd, _time=true)

返回:

csv
| first(spd) | _time                     |
| ---------- | ------------------------- |
| 1          | 2018-11-03T01:02:03+08:00 |
sql
first(spd, vin, _time=true)

返回:

csv
| first(spd) | _time                     | first(vin) | _time                     |
| ---------- | ------------------------- | ---------- | ------------------------- |
| 1          | 2020-11-03T01:02:03+08:00 | LJNEFE2T1J | 2018-11-03T01:02:03+08:00 |

结果类型

expr 相同(如果窗口中没有行,则为“null”)

first_row/last_row (第一行/最后一行)

返回第一行或最后一行,按主时间列排序。

_time 参数是可选的,默认为 false。如果 _timetrue,则时间列将包含在输出中。

语法

  • first_row(* <, _time=false>)
  • first_row(expr1, expr2, ... <, _time=false>)
  • last_row(* <, _time=false>)
  • last_row(expr1, expr2, ... <, _time=false>)

示例

sql
first_row(*, _time=true)

返回:

csv
| column1 | column2 | column3 | _time                     |
| ------- | ------- | ------- | ------------------------- |
| 1       | 2       | 3       | 2018-11-03T01:02:03+08:00 |

结果类型

(expr1, expr2, ...) 相同,如果窗口中没有行,则为“null”列表

std/stddev/stddev_pop (总体标准差)

std/stddev/stddev_pop 函数是一个聚合函数,用于计算一组数值的标准差。标准差是衡量数据集中数值的离散程度的一种统计量。它表示数据集的值相对于平均值的分散程度。标准差越大,数据集的值越分散;标准差越小,数据集的值越集中。

结果类型

float64

语法

std(expr), stddev(expr), stddev_pop(expr)

示例

sql
std(expr), stddev(spd), stddev_pop(expr)

返回:

csv
| std(spd)           | stddev(spd)        | stddev_pop(spd)    |
| ------------------ | ------------------ | ------------------ |
| 20.716134351707083 | 20.716134351707083 | 20.716134351707083 |

stddev_samp(样本标准差)

计算样本数据的标准差

结果类型

float64

语法

stddev_samp(expr)

返回:

| stddev_samp(spd)   |
| ------------------ |
| 20.716134351707083 |

median/quantile(中位数)

计算数值类型的近似中位数

结果类型

float64

语法

median(columnName), quantile(columnName)

返回:

csv
| median(spd) | quantile(spd) |
| ----------- | ------------- |
| 25.25       | 25.25         |

variance/var_pop (总体标准方差)

计算 Σ((x - x̅)^2) / n,其中 n 是样本大小,x̅ 是 x 的平均值。

衡量随机变量或一组数据时离散程度。

结果类型

float64

语法

variance(expr), var_pop(expr)

返回:

csv
| variance(spd)     | var_pop(spd)      |
| ----------------- | ----------------- |
| 277.5596054514135 | 277.5596054514135 |

var_samp(样本方差)

计算量 Σ((x - x̅)^2) / (n - 1),其中 n 是样本大小,x̅ 是 x 的平均值。

衡量随机变量或一组数据时离散程度。

结果类型

float64

语法

var_samp(expr)

返回:

csv
| var_samp(spd)     |
| ----------------- |
| 277.5596054514135 |

t_max

基于时序数据的最大值,与 max 不同的时候的是最大值可能是头尾的点,可能是计算出来的

t_min

基于时序数据的最小值,与 min 不同的时候的是最大值可能是头尾的点,可能是计算出来的

t_avg/mean

基于时序数据的平均值,即几何平均值,与 avg 不同的是头尾的数据可能是计算出来的

t_count

基于时序数据的 count

flow/t_sum

计算时间范围内的流量值,计算方法:测点数值和时间围成的多边形面积。

时序数据的求和函数,基于时间的加权和

语法

sql
flow(column[, time_unit])

column: 数据字段,需要为数值类型
time_unit: 时间单位,默认值 1h

  • 1ns: 纳秒
  • 1us: 微秒
  • 1ms: 毫秒
  • 1s: 秒
  • 1m: 分
  • 1h: 小时
  • 1d: 天

返回值

按 key 分组的 float64

csv
key,tm,spd
key1,2021-11-01 00:00:00,10
key1,2021-11-01 00:00:01,20
key1,2021-11-01 00:00:04,40
key2,2021-11-01 00:00:00,40
key2,2021-11-01 00:00:01,40
text
# 表示 key1 的速度为 105km/h, key2 的速度 40km/h
> SELECT key, flow(value, '1h') FROM tab WHERE tm >= '2021-11-01 00:00:00' AND tm <= '2021-11-01 00:00:04' ...

┌──key──────┬───flow(value, '1h')──────┐
│  key1     │    105                   │
│  key2     │    40                    │
└───────────┴──────────────────────────┘

> SELECT key, flow(value, '1s') FROM tab WHERE tm >= '2021-11-01 00:00:00' AND tm <= '2021-11-01 00:00:04' AND _interval = '1s'
-- 与 _interval 字段一起使用时,将会对数据进行线性插值,然后再计算面积

┌──key──────┬───flow(value, '1s')──────┐
│  key1     │    105                   │
│  key2     │    40                    │
└───────────┴──────────────────────────┘

plot

plot:绘图值,数据库根据真实存储的数据,查询时需要给定查询的开始和结束时间区间,返回结果中包括实际数据加上区间内的波峰和波谷等数据集合。

当前函数使用限制:

  • 仅可在 SELECT 中使用
  • 仅能与 plot 函数一起使用(多个 plot 函数)
  • WHERE 条件中不存在 _interval 条件时,默认使用 时间过滤的 end - start 作为 _interval

语法

sql
plot(column)

column: 数据字段,需要为数值类型

返回值

  • key: 当前数据的 key
  • ts: 当前数据的时间戳
  • field: 当前数据的字段名称,为 数据库名.表名.字段名
  • value: 当前数据的值
csv
key,tm,value1,value2
key1,2021-11-01 00:00:01,10,1.0
key1,2021-11-01 00:00:02,20,1.1
key1,2021-11-01 00:00:03,30,1.2
key1,2021-11-01 00:00:04, 0,1.3
key1,2021-11-01 00:00:05,40,1.4
key2,2021-11-01 00:00:00,40,2.0
key2,2021-11-01 00:00:01,40,2.1
text
> SELECT plot(value1) FROM tab WHERE tm >= '2021-11-01 00:00:00' AND tm <= '2021-11-01 00:00:04' AND _interval = '5s' ...

┌──key──────┬──tm────────────────────┬──field──────────┬──value─────┐
│  key1     │ 2021-11-01T00:00:00Z   | db.tab1.value1  |  10        │ 
│  key1     │ 2021-11-01T00:00:03Z   | db.tab1.value1  |  30        │ 
│  key1     │ 2021-11-01T00:00:04Z   | db.tab1.value1  |   0        │ 
│  key1     │ 2021-11-01T00:00:05Z   | db.tab1.value1  |  40        │ 
│  key2     │ 2021-11-01T00:00:00Z   | db.tab1.value1  |  40        │ 
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value1  |  40        │
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value1  |  40        │
└───────────┴────────────────────────┴─────────────────┴────────────┘

> SELECT plot(value1), plot(value2) FROM tab WHERE tm >= '2021-11-01 00:00:00' AND tm <= '2021-11-01 00:00:04' AND _interval = '5s'

┌──key──────┬──tm────────────────────┬──field──────────┬──value─────┐
│  key1     │ 2021-11-01T00:00:00Z   | db.tab1.value1  |  10        │ <- key1 在 00:00:00 的 value1 的值
│  key1     │ 2021-11-01T00:00:03Z   | db.tab1.value1  |  30        │ <- key1 在区间 00:00:00 - 00:00:05 的 value1 的最大值
│  key1     │ 2021-11-01T00:00:04Z   | db.tab1.value1  |   0        │ <- key1 在区间 00:00:00 - 00:00:05 的 value1 的最小值
│  key1     │ 2021-11-01T00:00:05Z   | db.tab1.value1  |  40        │ <- key1 在 00:00:05 的 value1 的值
│  key2     │ 2021-11-01T00:00:00Z   | db.tab1.value1  |  40        │ <- key2 在 00:00:00 的 value1 的值
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value1  |  40        │ ...
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value1  |  40        │ ... 
│  key1     │ 2021-11-01T00:00:00Z   | db.tab1.value2  |  1.0       │ <- key1 在 00:00:00 的 value2 的值
│  key1     │ 2021-11-01T00:00:04Z   | db.tab1.value2  |  1.3       │ <- key1 在区间 00:00:00 - 00:00:05 的 value2 的最大值
│  key1     │ 2021-11-01T00:00:02Z   | db.tab1.value2  |  1.1       │ <- key1 在区间 00:00:00 - 00:00:05 的 value2 的最小值
│  key1     │ 2021-11-01T00:00:05Z   | db.tab1.value2  |  1.4       │ <- key1 在 00:00:05 的 value2 的值
│  key2     │ 2021-11-01T00:00:00Z   | db.tab1.value2  |  2.0       │ <- key2 在 00:00:00 的 value2 的值
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value2  |  2.1       │ ...
│  key2     │ 2021-11-01T00:00:01Z   | db.tab1.value2  |  2.1       │ ... key2 在 00:00:05 时无值,不返回
└───────────┴────────────────────────┴─────────────────┴────────────┘