TDengine 数学函数 SQRT 用户手册

SQRT 函数
语法
SQRT(expr)
功能说明
计算指定字段的平方根。
版本
v3.0.0.0
返回结果类型
DOUBLE
适用数据类型
数值类型。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 如果
expr为 NULL,返回 NULL。 - 如果
expr为负数,返回 NULL。 - 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 支持嵌套使用,例如
SQRT(SQRT(value))。
示例所用表与数据(可直接复制执行)
-- 建库与使用
CREATE DATABASE IF NOT EXISTS power;
USE power;-- 智能电表表结构(带相位信息)
CREATE STABLE meters (ts TIMESTAMP,current FLOAT,voltage INT,phase FLOAT,power DOUBLE
) TAGS (groupid INT,location VARCHAR(64)
);-- 子表
CREATE TABLE d1001 USING meters TAGS (1, 'California.SanFrancisco');
CREATE TABLE d1002 USING meters TAGS (2, 'California.LosAngeles');-- 写入数据
INSERT INTO d1001 VALUES('2024-01-01 10:00:00.000', 10.3, 220, 30.0, 2266.0),('2024-01-01 10:01:00.000', 12.6, 221, 45.0, 2790.6),('2024-01-01 10:02:00.000', 8.5, 223, 60.0, 1895.5),('2024-01-01 10:03:00.000', 11.2, 222, 90.0, 2486.4);INSERT INTO d1002 VALUES('2024-01-01 10:00:00.000', 9.0, 219, 0.0, 1971.0),('2024-01-01 10:01:00.000', 14.0, 222, 120.0, 3108.0),('2024-01-01 10:02:00.000', 7.2, 220, 180.0, 1584.0),('2024-01-01 10:03:00.000', 10.5, 221, -30.0, 2320.5);
基础示例
示例 1: 常量平方根计算
-- 计算常见数值的平方根
taos> SELECT SQRT(4);sqrt(4) |
==========================2.000000000000000 |taos> SELECT SQRT(9);sqrt(9) |
==========================3.000000000000000 |taos> SELECT SQRT(16);sqrt(16) |
==========================4.000000000000000 |taos> SELECT SQRT(2);sqrt(2) |
==========================1.414213562373095 |
示例 2: 负数处理
-- 负数返回 NULL
taos> SELECT SQRT(-1);sqrt(-1) |
========================NULL |taos> SELECT SQRT(-100);sqrt(-100) |
========================NULL |
示例 3: NULL 值处理
taos> SELECT SQRT(NULL);sqrt(null) |
========================NULL |
示例 4: 列数据平方根计算
-- 计算电压的平方根
SELECT ts,voltage,SQRT(voltage) AS voltage_sqrt
FROM d1001
ORDER BY ts;
ts | voltage | voltage_sqrt |
====================================================================2024-01-01 10:00:00.000 | 220 | 14.832396974191326 |2024-01-01 10:01:00.000 | 221 | 14.866068747318506 |2024-01-01 10:02:00.000 | 223 | 14.933184523068077 |2024-01-01 10:03:00.000 | 222 | 14.899664200685485 |
智能电表场景示例
示例 5: 电流均方根(RMS)计算
目的:计算交流电流的均方根值,用于评估电流的有效值。
-- 计算电流平方的平均值再开方得到RMS
SELECT location,SQRT(AVG(POW(current, 2))) AS current_rms
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
应用价值:
- 准确计算交流电流有效值
- 评估用电设备负载
- 识别电流异常波动
示例 6: 功率因数计算
目的:通过功率关系计算功率因数,评估用电效率。
-- 计算功率因数 cos(φ) = P / S,其中 S = V * I
SELECT ts,power AS active_power,voltage * current AS apparent_power,power / (voltage * current) AS power_factor,SQRT(POW(voltage * current, 2) - POW(power, 2)) AS reactive_power
FROM d1001
WHERE voltage * current > 0
ORDER BY ts;
应用价值:
- 评估用电效率
- 识别需要无功补偿的场景
- 优化电能质量
示例 7: 三相不平衡度计算
目的:计算电流不平衡度,评估三相负载均衡情况。
-- 计算电流不平衡度(简化版)
SELECT _wstart AS time_window,AVG(current) AS avg_current,STDDEV(current) AS current_stddev,STDDEV(current) / AVG(current) * 100 AS imbalance_rate
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 11:00:00'
INTERVAL(10m);
应用价值:
- 检测三相不平衡
- 预防中性线过载
- 保护电气设备
示例 8: 阻抗计算
目的:根据电压和电流计算线路阻抗,用于故障诊断。
-- 计算阻抗 Z = V / I
SELECT ts,voltage,current,voltage / current AS impedance,SQRT(POW(voltage / current, 2)) AS impedance_magnitude
FROM meters
WHERE current > 0.1
ORDER BY ts;
应用价值:
- 识别线路异常
- 检测接触不良
- 预防设备故障
示例 9: 能量波动分析
目的:分析功率波动的幅度,识别负载变化模式。
-- 计算功率波动的标准差
SELECT _wstart AS time_window,AVG(power) AS avg_power,STDDEV(power) AS power_stddev,SQRT(AVG(POW(power, 2))) AS rms_power
FROM meters
WHERE ts >= '2024-01-01 00:00:00'AND ts < '2024-01-02 00:00:00'
INTERVAL(10m);
应用价值:
- 识别负载变化规律
- 优化发电调度
- 预测用电需求
示例 10: 距离计算(简化版)
目的:计算运行参数与标准值的偏离程度。
-- 计算与标准值的欧几里得距离
SELECT location,AVG(voltage) AS avg_voltage,SQRT(POW(AVG(voltage) - 220, 2) + POW(AVG(current) - 10, 2)) AS distance_from_normal
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
应用价值:
- 综合评估运行状态
- 多维度异常检测
- 空间分析
示例 11: 四次方根计算(嵌套使用)
目的:通过嵌套SQRT函数实现四次方根计算,用于特殊的数学模型。
-- 计算功率的四次方根
SELECT ts,power,SQRT(SQRT(power)) AS fourth_root_power
FROM meters
WHERE power > 0
ORDER BY ts
LIMIT 10;
应用价值:
- 支持复杂数学模型
- 非线性数据变换
- 特征工程
示例 12: 电压质量评估
目的:评估电压稳定性和质量。
-- 计算电压偏差和变异系数
SELECT location,AVG(voltage) AS avg_voltage,STDDEV(voltage) AS voltage_stddev,STDDEV(voltage) / AVG(voltage) * 100 AS variation_coefficient
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
应用价值:
- 量化电压稳定性
- 识别电压质量问题
- 指导电压调节策略
生产场景应用与目的
场景 A: 电能质量监测与分析
目的:通过计算电压、电流的标准差和变异系数,全面评估电能质量。
示例:
-- 生成电能质量日报表
SELECT location,AVG(voltage) AS avg_voltage,STDDEV(voltage) AS voltage_stddev,AVG(current) AS avg_current,STDDEV(current) AS current_stddev,SQRT(AVG(POW(current, 2))) AS current_rms
FROM meters
WHERE ts >= NOWAND ts < NOW + 1d
GROUP BY location;
场景 B: 负载预测模型特征提取
目的:在负载预测模型中,使用SQRT进行特征工程,提高预测准确性。
示例:
-- 提取负载特征用于机器学习
SELECT _wstart AS time_window,AVG(power) AS avg_power,SQRT(AVG(power)) AS sqrt_power,SQRT(AVG(POW(power, 2))) AS rms_power,MAX(power) - MIN(power) AS power_range,STDDEV(power) AS power_stddev
FROM meters
WHERE ts >= NOW - 7d
INTERVAL(1h);
注意事项
-
负数处理:SQRT 不能对负数开方,会返回 NULL。如需处理负数,应先取绝对值或进行其他预处理。
-
精度问题:SQRT 返回 DOUBLE 类型,存在浮点精度限制,在需要高精度的场景下需要注意。
-
性能考虑:
- SQRT 是逐行计算的标量函数,在大数据集上使用时建议配合 WHERE 条件过滤
- 避免在子查询中重复计算相同的平方根值
-
与POW函数配合:常用组合
SQRT(POW(x, 2) + POW(y, 2))计算欧几里得距离。 -
NULL 传播:输入为 NULL 时返回 NULL,在聚合计算中需要注意 NULL 值的影响。
-
嵌套使用:支持嵌套,如
SQRT(SQRT(x))计算四次方根,但嵌套层数过多会影响可读性。
数学关系
- 基本定义:
SQRT(x) = x^(1/2),其中 x ≥ 0 - 反函数:
POW(SQRT(x), 2) = x - 运算性质:
SQRT(x * y) = SQRT(x) * SQRT(y)SQRT(x / y) = SQRT(x) / SQRT(y)SQRT(x^2) = |x|
- 常用组合:
- 标准差:
STDDEV(x)内部使用 SQRT - 欧几里得距离:
SQRT(POW(x1-x2, 2) + POW(y1-y2, 2)) - 均方根(RMS):
SQRT(AVG(POW(x, 2)))
- 标准差:
相关函数
- POW:幂运算函数,
POW(x, 0.5)等价于SQRT(x) - ABS:绝对值函数,
SQRT(POW(x, 2))等价于ABS(x) - AVG:平均值函数,常与 SQRT 配合计算统计指标
- STDDEV:标准差函数,内部实现使用了 SQRT
函数意义与实际应用价值
数学意义
SQRT 函数是数学中基本的根式运算,在统计学、物理学、工程学等领域有广泛应用。它是计算标准差、欧几里得距离、均方根等重要指标的基础。
实际应用价值
-
统计分析
- 计算标准差和方差
- 评估数据波动性
- 实现正态分布相关计算
-
电力计算
- 计算交流电有效值(RMS)
- 分析功率因数
- 评估电压稳定性
-
距离计算
- 多维空间距离测量
- 相似度计算
- 聚类分析
-
特征工程
- 数据标准化
- 非线性变换
- 降低数据偏态
-
异常检测
- 基于标准差的异常识别
- 多维度综合评分
- 健康度评估
本用户手册提供了 SQRT 函数的完整使用说明,特别针对电力系统中的电能质量监测、设备健康评估、负载分析等实际需求,所有示例均符合 TDengine 语法规范,方便用户快速上手并应用于生产环境。
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。
