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 提供實時分析、可視化、事件管理與報警等功能。