当前位置: 首页 > news >正文

TDengine 聚合函数 COUNT 用户手册

在这里插入图片描述

COUNT 函数用户手册

函数概述

COUNT 函数是 TDengine 中最基础和最重要的聚合函数之一,用于统计指定字段的记录行数。该函数可以接受星号(*)或具体的列名作为参数,是进行数据计数统计的首选函数。

语法

COUNT({* | expr})

参数说明

  • *:统计所有记录数量,包括 NULL 值
  • expr:指定的列名或表达式,统计该列中非 NULL 值的记录数量

返回值

  • 数据类型:BIGINT
  • 返回内容:符合条件的记录数量

适用范围

  • 数据类型:全部类型字段
  • 表类型:普通表和超级表
  • 子查询:支持嵌套子查询,适用于内层查询和外层查询
  • 分组查询:支持与 GROUP BY 子句配合使用
  • 窗口查询:支持 INTERVAL 时间窗口聚合

重要限制

TDengine 有以下语法限制:

不支持的语法:

  • COUNT(DISTINCT column)
  • COUNT(DISTINCT CASE WHEN condition THEN column END)
  • COUNT(UNIQUE(column)) - 不支持函数嵌套
  • COUNT(CASE WHEN function() THEN 1 END) - CASE WHEN 中不支持函数调用

支持的语法:

  • COUNT(column)
  • COUNT(*)
  • COUNT(CASE WHEN column > value THEN 1 END) - 简单条件判断

智能电表场景应用示例

基于智能电表数据库结构:

-- 数据库和表结构
USE test;
-- meters 超级表包含 ts, current, voltage, phase 字段和 location, groupid 标签

基础统计功能

总记录数统计
-- 统计所有电表的总记录数
SELECT COUNT(*) FROM meters;-- 统计电流数据的有效记录数(非空值)
SELECT COUNT(current) FROM meters;-- 统计电压数据的有效记录数
SELECT COUNT(voltage) FROM meters;-- 统计相位数据的有效记录数
SELECT COUNT(phase) FROM meters;
多字段统计
-- 同时统计多个字段的非空值数量
SELECT COUNT(current) as current_count,COUNT(voltage) as voltage_count,COUNT(phase) as phase_count,COUNT(*) as total_count
FROM meters;

条件统计分析

按数值范围统计
-- 统计电流大于 20A 的记录数
SELECT COUNT(*) FROM meters WHERE current > 20;-- 统计电压在正常范围内的记录数
SELECT COUNT(*) FROM meters WHERE voltage BETWEEN 200 AND 240;-- 统计相位值异常的记录数
SELECT COUNT(*) FROM meters WHERE phase < 0.85 OR phase > 1.0;
按时间范围统计
-- 统计最近一小时的数据记录数
SELECT COUNT(*) FROM meters 
WHERE ts >= NOW() - 1h;-- 统计今日的数据记录数
SELECT COUNT(*) FROM meters 
WHERE ts >= TODAY();-- 统计本周的数据记录数
SELECT COUNT(*) FROM meters 
WHERE ts >= NOW() - 7d;

分组统计分析

按区域分组统计
-- 按地理位置统计各区域的记录数
SELECT location,COUNT(*) as total_records,COUNT(current) as current_records,COUNT(voltage) as voltage_records
FROM meters 
GROUP BY location;
按设备组分组统计
-- 按设备组统计记录数
SELECT groupid,location,COUNT(*) as group_records,COUNT(current) as valid_current_data
FROM meters 
GROUP BY groupid, location;
按电表分组统计
-- 统计每个电表的记录数
SELECT tbname,location,COUNT(*) as device_records,COUNT(current) as current_data_count
FROM meters 
GROUP BY tbname, location
ORDER BY device_records DESC;

时间窗口统计

按小时统计
-- 每小时数据记录数统计
SELECT COUNT(*) as hourly_count 
FROM meters 
INTERVAL(1h);-- 按区域每小时统计
SELECT location,COUNT(*) as hourly_records
FROM meters 
INTERVAL(1h) GROUP BY location;
按天统计
-- 每日数据记录数统计
SELECT COUNT(*) as daily_count 
FROM meters 
INTERVAL(1d);-- 按电表每日统计
SELECT tbname,COUNT(*) as daily_device_count
FROM meters 
INTERVAL(1d) GROUP BY tbname;
滑动窗口统计
-- 滑动窗口统计(每小时窗口,30分钟滑动)
SELECT COUNT(*) as sliding_count 
FROM meters 
INTERVAL(1h) SLIDING(30m);

数据质量分析

数据完整性检查
-- 检查各字段的数据完整性
SELECT location,COUNT(*) as total_count,COUNT(current) as current_count,COUNT(voltage) as voltage_count,COUNT(phase) as phase_count,(COUNT(*) - COUNT(current)) as current_missing,(COUNT(*) - COUNT(voltage)) as voltage_missing,(COUNT(*) - COUNT(phase)) as phase_missing
FROM meters 
GROUP BY location;
设备数据上报率统计
-- 统计各设备的数据上报频率
SELECT tbname,location,COUNT(*) as report_count,CASE WHEN COUNT(*) >= 1440 THEN '正常上报'  -- 假设每分钟一条记录WHEN COUNT(*) >= 720 THEN '上报偏少'ELSE '上报异常'END as report_status
FROM meters 
WHERE ts >= NOW() - 1d
GROUP BY tbname, location;
使用 UNION ALL 合并统计
-- 合并在线设备和总设备统计
SELECT location,stat_type,device_count
FROM (SELECT location,'online' as stat_type,COUNT(*) as device_countFROM (SELECT DISTINCT location, tbname FROM meters WHERE ts >= NOW() - 10m) GROUP BY locationUNION ALLSELECT location,'total' as stat_type,COUNT(*) as device_countFROM (SELECT DISTINCT location, tbname FROM meters) GROUP BY location
) 
ORDER BY location, stat_type;

实际应用价值

负载预测
-- 为负载预测提供基准数据
SELECT location,COUNT(*) as data_points
FROM meters 
WHERE ts >= NOW() - 30d
GROUP BY location;
设备配置优化
-- 为设备配置提供参考
SELECT groupid,COUNT(*) as measurement_points
FROM meters 
GROUP BY groupid;

性能优化建议

时间范围优化
-- 推荐:指定时间范围
SELECT COUNT(*) FROM meters 
WHERE ts >= NOW() - 1d;-- 不推荐:无条件全表统计(数据量很大时)
SELECT COUNT(*) FROM meters;
索引利用
-- 利用标签索引的查询
SELECT COUNT(*) FROM meters 
WHERE location = 'Beijing';-- 利用时间索引的查询
SELECT COUNT(*) FROM meters 
WHERE ts BETWEEN '2024-01-01 00:00:00' AND '2024-01-01 23:59:59';

注意事项

  1. NULL 值处理

    • COUNT(*) 计算所有行,包括 NULL 值
    • COUNT(column) 只计算非 NULL 值
  2. 语法限制

    • 不支持 COUNT(DISTINCT column) 语法
    • 不支持函数嵌套,如 COUNT(UNIQUE(column))
    • CASE WHEN 中不能使用函数调用
  3. 性能考虑

    • 大表上的无条件 COUNT 操作可能较慢
    • 建议结合时间范围或其他过滤条件使用
  4. 数据类型

    • 返回值始终为 BIGINT 类型
    • 可以处理任何数据类型的输入列
  5. 聚合规则

    • 在 GROUP BY 查询中,COUNT 为每个分组返回一个结果
    • 在窗口查询中,COUNT 为每个时间窗口返回一个结果
  6. 时间间隔语法

    • 使用 NOW() - 1h 而不是 NOW() - INTERVAL 1 HOUR
    • 使用 NOW() - 1d 而不是 NOW() - INTERVAL 1 DAY
    • 支持的时间单位:s(秒)、m(分钟)、h(小时)、d(天)
  7. tsCountAlwaysReturnValue 参数

    • 当启用此参数时,即使没有数据也返回 0
    • 默认情况下,无数据时返回空结果

相关函数

  • SUM(): 计算总和
  • AVG(): 计算平均值
  • MAX(): 返回最大值
  • MIN(): 返回最小值
  • FIRST(): 返回最先的值
  • LAST(): 返回最后的值
  • UNIQUE(): 返回去重后的值(不能嵌套使用)

关于 TDengine

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


文章转载自:

http://Fy4dKI8V.xkjrq.cn
http://qPkTuE9o.xkjrq.cn
http://z3wHs34p.xkjrq.cn
http://xs6IBKsA.xkjrq.cn
http://7C2mT7kx.xkjrq.cn
http://H3alXUSp.xkjrq.cn
http://u82CsjLz.xkjrq.cn
http://rVt0Va7n.xkjrq.cn
http://85NwSgji.xkjrq.cn
http://fou5TF8U.xkjrq.cn
http://mfI9gdWK.xkjrq.cn
http://dACAXl82.xkjrq.cn
http://YclACu4B.xkjrq.cn
http://HvBHkKmB.xkjrq.cn
http://uEVfHGft.xkjrq.cn
http://ge6cCTdN.xkjrq.cn
http://lbY311JA.xkjrq.cn
http://URGOWfpa.xkjrq.cn
http://suLAbC2o.xkjrq.cn
http://AubaKFmG.xkjrq.cn
http://RN0rmiRS.xkjrq.cn
http://Wpg3Sknm.xkjrq.cn
http://krcFDEXc.xkjrq.cn
http://0nXgEcMq.xkjrq.cn
http://9KzlcClR.xkjrq.cn
http://RYmFw6oI.xkjrq.cn
http://iwtBYMXy.xkjrq.cn
http://wqP4MecC.xkjrq.cn
http://5wlwMagF.xkjrq.cn
http://p1DxlObD.xkjrq.cn
http://www.dtcms.com/a/385332.html

相关文章:

  • STM32F103C8T6开发板入门学习——点亮LED灯
  • K-means 聚类算法:基于鸢尾花数据集的无监督学习全流程解析
  • JVM新生代/老年代垃圾回收器、内存分配与回收策略
  • 介绍一下 RetNet
  • rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑
  • 如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据
  • Android音视频学习路线图
  • 深入理解C语言指针(一)| 从内存到传址调用,掌握指针的核心本质
  • 代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析
  • springboot与vue中webSocket前后端连接问题
  • 数据结构——顺序存储链式存储
  • Vue 脚手架与webpack
  • pytest单元测试框架
  • CentOS7.9绿色安装mysql5.7.44
  • Cell Biology Learning Track(I)膜结构
  • 医院用的桌面管控软件有哪些?适用于医院的桌面管控软件推荐
  • 异步编程三剑客:回调、闭包与Promise组合实战
  • MySQL 主从同步(复制)实战
  • redis面试点记录
  • mysql和postgresql如何选择
  • 电磁兼容性(EMC)法规
  • 【论文笔记】Self-Supervised Point Cloud Prediction for Autonomous Driving
  • MySQL数据库(四)—— 使用MyCat实现MySQL主从读写分离实战指南
  • HTB paper
  • oracle认证有哪几种?如何选择
  • YoloV8改进策略:上采样改进|反卷积|数学上可逆的反卷积」塞进 YOLOv8,涨点不涨参!图像恢复黑科技 Converse2D 的跨界奇袭!
  • springboot netty 服务端网络编程入门与实战
  • 从零开始学AI——15
  • Linux C库函数的可重入与不可重入版本说明
  • ZooKeeper核心知识点总结:分布式系统的“协调者”