TDengine 特殊函数 MODE() 用户手册
根据您的要求,我来重新编写 MODE 函数用户手册:
MODE 函数用户手册
函数定义
MODE(expr)
功能说明
MODE()
函数返回指定列中出现频率最高的值(众数)。如果有多个值具有相同的最高频率,系统会返回其中一个值。该函数会忽略 NULL 值。
算法原理
MODE 函数的计算过程如下:
- 数据收集: 遍历指定列的所有非 NULL 值
- 频率统计: 使用哈希表记录每个值的出现次数
- 众数识别: 找出出现次数最多的值
- 结果返回: 如果存在多个具有相同最高频率的值,返回其中一个
版本要求
- 最低版本: v3.0.0.0
返回值
- 数据类型: 与输入参数相同的数据类型
- 返回内容: 出现频率最高的值
参数说明
参数 | 类型 | 说明 | 取值范围 |
---|---|---|---|
expr | 表达式 | 要统计的字段表达式 | 所有数据类型 |
适用数据类型
MODE 函数支持以下数据类型:
- 数值类型: TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、UTINYINT、USMALLINT、UINT、UBIGINT、DECIMAL
- 字符串类型: VARCHAR、NCHAR
- 布尔类型: BOOL
- 时间戳类型: TIMESTAMP
适用范围
- 表类型: 表和超级表
- 查询支持: 支持聚合查询
- 函数特性: 聚合函数、忽略 NULL 值
基本用法示例
单列查询
-- 查找电流的众数值
SELECT MODE(current) FROM meters;-- 查找电压的众数值
SELECT MODE(voltage) FROM meters;-- 查找相位的众数值
SELECT MODE(phase) FROM meters;
分组查询
-- 按区域分组查找电流众数
SELECT location,MODE(current) as current_mode
FROM meters
GROUP BY location;
字符串类型的众数
-- 查找最常见的设备状态
SELECT MODE(device_status) FROM device_logs;-- 查找最常见的告警类型
SELECT MODE(alarm_type) FROM alarm_records;
智能电表场景应用示例
基于智能电表数据库结构:
-- 数据库和表结构
USE test;
-- meters 超级表包含 ts, current, voltage, phase 字段和 location, groupid 标签
场景1:负载模式分析
-- 查找全网最常见的电流值
SELECT MODE(current) as typical_current FROM meters;-- 查找全网最常见的电压值
SELECT MODE(voltage) as typical_voltage FROM meters;-- 查找全网最常见的相位值
SELECT MODE(phase) as typical_phase FROM meters;
场景2:按区域分析典型负载
-- 查找每个区域最典型的电流值
SELECT location,MODE(current) as regional_typical_current
FROM meters
GROUP BY location;-- 查找每个区域最典型的电压值
SELECT location,MODE(voltage) as regional_typical_voltage
FROM meters
GROUP BY location;
场景3:设备运行模式分析
-- 查找各电表的典型运行电流
SELECT tbname,location,MODE(current) as device_typical_current
FROM meters
GROUP BY tbname, location;-- 查找各电表的典型运行电压
SELECT tbname,location,MODE(voltage) as device_typical_voltage
FROM meters
GROUP BY tbname, location;
场景4:负载基准值确定
-- 确定各区域的负载基准值
SELECT location,MODE(current) as load_baseline,COUNT(*) as total_readings
FROM meters
GROUP BY location;
场景5:电网稳定性分析
-- 分析电压稳定性(最常见电压值)
SELECT location,MODE(voltage) as stable_voltage_level,groupid
FROM meters
GROUP BY location, groupid;
场景6:设备分类分析
-- 根据典型电流值对设备进行分类
SELECT tbname,location,MODE(current) as typical_load,CASE WHEN MODE(current) < 5 THEN '低负载设备'WHEN MODE(current) < 15 THEN '中负载设备'WHEN MODE(current) < 25 THEN '高负载设备'ELSE '超高负载设备'END as device_category
FROM meters
GROUP BY tbname, location;
场景7:时间段负载模式
-- 分析最近一周的典型负载模式
SELECT location,MODE(current) as weekly_typical_current
FROM meters
WHERE ts >= NOW() - 7d
GROUP BY location;-- 分析工作日的典型负载模式
SELECT location,MODE(current) as weekday_typical_current
FROM meters
WHERE ts >= NOW() - 30d AND WEEKDAY(ts) BETWEEN 1 AND 5
GROUP BY location;
场景8:电力质量标准分析
-- 分析各区域的标准电压值
SELECT location,MODE(voltage) as standard_voltage,CASE WHEN MODE(voltage) BETWEEN 215 AND 225 THEN '标准电压区域'WHEN MODE(voltage) < 215 THEN '低电压区域'WHEN MODE(voltage) > 225 THEN '高电压区域'ELSE '电压不稳定区域'END as voltage_quality
FROM meters
GROUP BY location;
场景9:设备组运行特征
-- 分析不同设备组的运行特征
SELECT groupid,location,MODE(current) as group_typical_current,MODE(voltage) as group_typical_voltage,MODE(phase) as group_typical_phase
FROM meters
GROUP BY groupid, location;
场景10:异常检测基准建立
-- 建立异常检测的基准值
SELECT tbname,location,MODE(current) as normal_current_baseline,MODE(voltage) as normal_voltage_baseline
FROM meters
WHERE ts >= NOW() - 30d -- 最近30天的数据
GROUP BY tbname, location;
分步查询示例
当需要结合其他统计信息时:
-- 第一步:获取众数
SELECT location,MODE(current) as current_mode
FROM meters
GROUP BY location;-- 第二步:获取其他统计信息
SELECT location,AVG(current) as current_avg,MAX(current) as current_max,MIN(current) as current_min,COUNT(*) as total_count
FROM meters
GROUP BY location;-- 第三步:在应用层分析众数与其他统计量的关系
实际应用价值
负载预测
-- 为负载预测提供基准数据
SELECT location,MODE(current) as predicted_base_load
FROM meters
WHERE ts >= NOW() - 30d
GROUP BY location;
设备配置优化
-- 为设备配置提供参考
SELECT groupid,MODE(voltage) as recommended_voltage_setting,MODE(current) as typical_current_consumption
FROM meters
GROUP BY groupid;
注意事项
- NULL 值处理: MODE 函数自动忽略 NULL 值
- 多众数处理: 当有多个值具有相同最高频率时,返回其中一个值
- 数据类型保持: 返回值的数据类型与输入参数保持一致
- 性能考虑: 在大表上使用时建议配合适当的时间范围过滤
- 样本量要求: 建议有足够的样本量以获得有意义的众数
- 聚合函数限制: 不能与其他特定聚合函数在同一 SELECT 中混用
- 分组查询: 适合与 GROUP BY 配合使用进行分类分析
相关函数
- AVG(): 返回平均值
- MAX(): 返回最大值
- MIN(): 返回最小值
- COUNT(): 返回计数
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。