Appearance
聚合函数列表
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
。如果 _time
是 true
,则时间列将包含在每个 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
。如果 _time
是 true
,则时间列将包含在输出中。
语法
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 时无值,不返回
└───────────┴────────────────────────┴─────────────────┴────────────┘