TDengine 特殊函数 MODE() 用户手册

发布于:2025-09-13 ⋅ 阅读:(21) ⋅ 点赞:(0)

在这里插入图片描述
根据您的要求,我来重新编写 MODE 函数用户手册:

MODE 函数用户手册

函数定义

MODE(expr)

功能说明

MODE() 函数返回指定列中出现频率最高的值(众数)。如果有多个值具有相同的最高频率,系统会返回其中一个值。该函数会忽略 NULL 值。

算法原理

MODE 函数的计算过程如下:

  1. 数据收集: 遍历指定列的所有非 NULL 值
  2. 频率统计: 使用哈希表记录每个值的出现次数
  3. 众数识别: 找出出现次数最多的值
  4. 结果返回: 如果存在多个具有相同最高频率的值,返回其中一个

版本要求

  • 最低版本: 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;

注意事项

  1. NULL 值处理: MODE 函数自动忽略 NULL 值
  2. 多众数处理: 当有多个值具有相同最高频率时,返回其中一个值
  3. 数据类型保持: 返回值的数据类型与输入参数保持一致
  4. 性能考虑: 在大表上使用时建议配合适当的时间范围过滤
  5. 样本量要求: 建议有足够的样本量以获得有意义的众数
  6. 聚合函数限制: 不能与其他特定聚合函数在同一 SELECT 中混用
  7. 分组查询: 适合与 GROUP BY 配合使用进行分类分析

相关函数

  • AVG(): 返回平均值
  • MAX(): 返回最大值
  • MIN(): 返回最小值
  • COUNT(): 返回计数

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。