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

TDengine 数学函数 FLOOR 用户手册

在这里插入图片描述

FLOOR

FLOOR(expr)

功能说明

返回指定字段的向下取整(不大于该值的最大整数)。

版本

v3.0.0.0

返回结果类型

与输入字段的原始数据类型一致(整数类型返回整数,浮点类型返回浮点)。

适用数据类型

数值类型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE 及其无符号类型)。

嵌套子查询支持

适用于内层查询和外层查询。

适用于

表和超级表。

使用说明

  • expr 为 NULL,返回 NULL。
  • 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 不支持字符串、布尔、时间戳等非数值类型。
  • 支持嵌套使用,如 FLOOR(FLOOR(c1))
  • 不支持与聚合函数(如 COUNT、AVG)混用。
  • 对于整数类型,结果等于原值;对于浮点类型,结果为向下取整后的浮点数。

返回值计算过程

FLOOR 函数的计算遵循数学定义:

  • 正数FLOOR(3.7) = 3,返回不大于 3.7 的最大整数
  • 负数FLOOR(-3.7) = -4,返回不大于 -3.7 的最大整数(注意:-4 < -3.7 < -3)
  • 整数FLOOR(5) = 5,整数的向下取整等于自身
  • FLOOR(0) = 0

与 CEIL 的区别

  • FLOOR(3.7) = 3CEIL(3.7) = 4
  • FLOOR(-3.7) = -4CEIL(-3.7) = -3

错误处理

  • 参数个数错误、类型错误、无效表名等会报错。
  • 对不支持的数据类型(如 timestamp、bool、binary、nchar)会报错。

使用示例

假设有以下智能电表表结构:

CREATE DATABASE power;  
USE power;  CREATE STABLE meters (  ts TIMESTAMP,  current FLOAT,  voltage INT,  phase FLOAT,  temperature FLOAT  
) TAGS (  location VARCHAR(64),  groupId INT  
);  CREATE TABLE d1001 USING meters TAGS ('California.SanFrancisco', 1);  
CREATE TABLE d1002 USING meters TAGS ('California.LosAngeles', 2);  
基础示例

示例 1: 常量计算

taos> SELECT FLOOR(1.1);  floor(1.1)        |
==========================1 |taos> SELECT FLOOR(-1.1);  floor(-1.1)        |
==========================-2 |taos> SELECT FLOOR(5);  floor(5)        |
==========================5 |taos> SELECT FLOOR(NULL);  floor(null)      |
==========================NULL                  |

示例 2: 不同数值类型

-- 整数类型  
taos> SELECT FLOOR(100);  floor(100)       |
==========================100 |-- 浮点类型  
taos> SELECT FLOOR(3.14159);  floor(3.14159)    |
==========================3 |-- 负数  
taos> SELECT FLOOR(-9.99);  floor(-9.99)      |
==========================-10 |
智能电表场景示例

示例 3: 电流值整数化

-- 插入测试数据  
INSERT INTO d1001 VALUES   ('2018-10-03 14:38:05.000', 10.3, 220, 0.31, 25.5),  ('2018-10-03 14:38:15.000', 12.6, 220, 0.33, 28.2),  ('2018-10-03 14:38:16.800', 8.5, 221, 0.32, 22.8);  -- 将电流值向下取整为整数安培  
taos> SELECT ts, current, FLOOR(current) AS current_floor  FROM d1001;  ts          |  current  | current_floor |
======================================================2018-10-03 14:38:05 | 10.300000 |    10.000000 |2018-10-03 14:38:15 | 12.600000 |    12.000000 |2018-10-03 14:38:16 |  8.500000 |     8.000000 |

示例 4: 功率计算整数化

-- 计算功率并向下取整  
taos> SELECT ts,  current * voltage AS power_real,  FLOOR(current * voltage) AS power_floor  FROM d1001;ts          | power_real | power_floor |
==================================================2018-10-03 14:38:05 | 2266.000000 |  2266.000000 |2018-10-03 14:38:15 | 2772.000000 |  2772.000000 |2018-10-03 14:38:16 | 1878.500000 |  1878.000000 |

示例 5: 温度分段统计

-- 按温度向下取整分段统计设备数量  
taos> SELECT FLOOR(temperature) AS temp_floor,  COUNT(*) AS device_count  FROM meters  WHERE ts >= NOW - 1d  GROUP BY FLOOR(temperature)  ORDER BY temp_floor;temp_floor  | device_count |
================================22   |      150     |23   |      280     |24   |      320     |25   |      410     |

示例 6: 电压波动范围分析

-- 分析电压向下取整后的分布  
taos> SELECT FLOOR(voltage) AS voltage_floor,  MIN(voltage) AS min_voltage,  MAX(voltage) AS max_voltage,  COUNT(*) AS count  FROM meters  WHERE ts >= NOW - 7d  GROUP BY FLOOR(voltage);voltage_floor | min_voltage | max_voltage | count |
=======================================================218     |    218.2    |    218.9    |  123  |219     |    219.1    |    219.8    |  456  |220     |    220.0    |    220.9    |  789  |221     |    221.0    |    221.7    |  234  |

示例 7: 与其他数学函数组合

-- 结合 ABS 和 FLOOR  
taos> SELECT ts,  phase,  FLOOR(ABS(phase * 100)) AS phase_floor_abs  FROM d1001;-- 计算电流差值并向下取整  
taos> SELECT ts,  current,  FLOOR(current - LAG(current, 1) OVER (ORDER BY ts)) AS current_diff_floor  FROM d1001;  

示例 8: 嵌套使用

-- 多次向下取整(实际上一次就够了)  
taos> SELECT FLOOR(FLOOR(FLOOR(current))) AS nested_floor  FROM d1001;nested_floor  |
==================10.000000  |12.000000  |8.000000  |

示例 9: 在 WHERE 子句中使用

-- 查询电流向下取整后等于 10 的记录  
taos> SELECT ts, current  FROM d1001  WHERE FLOOR(current) = 10;ts          |  current  |
====================================2018-10-03 14:38:05 | 10.300000 |

示例 10: 费率计算(按整数千瓦时计费)

-- 计算用电量并向下取整(只计费完整千瓦时)  
taos> SELECT location,  SUM(current * voltage / 1000 * 0.001) AS kwh_total,  FLOOR(SUM(current * voltage / 1000 * 0.001)) AS kwh_billable  FROM meters  WHERE ts >= NOW - 1d  PARTITION BY location  INTERVAL(1d);

实际生产场景应用

场景 1: 设备容量规划 - 最大负载整数化

-- 计算各地区需要的整数容量(向下取整确保保守估计)  
SELECT   location,  MAX(current * voltage / 1000) AS peak_kw_actual,  FLOOR(MAX(current * voltage / 1000)) AS peak_kw_planning  
FROM meters  
WHERE ts >= NOW - 30d  
GROUP BY location;  

场景 2: 数据质量检查 - 检测异常小数值

-- 检测电压值中存在异常小数的记录(理论上应该是整数)  
SELECT   ts,  tbname,  voltage,  voltage - FLOOR(voltage) AS decimal_part  
FROM meters  
WHERE voltage - FLOOR(voltage) > 0.1  AND ts >= NOW - 1d  
ORDER BY decimal_part DESC; 

场景 3: 能效等级划分

-- 根据能效比向下取整划分设备等级  
SELECT   tbname,  AVG(current * voltage / temperature) AS efficiency_ratio,  FLOOR(AVG(current * voltage / temperature)) AS efficiency_level,  CASE   WHEN FLOOR(AVG(current * voltage / temperature)) >= 90 THEN '一级能效'  WHEN FLOOR(AVG(current * voltage / temperature)) >= 80 THEN '二级能效'  WHEN FLOOR(AVG(current * voltage / temperature)) >= 70 THEN '三级能效'  ELSE '低效设备'  END AS efficiency_grade  
FROM meters  
WHERE ts >= NOW - 30d  
GROUP BY tbname;

函数意义与实际应用价值

数学意义

FLOOR 函数在数学上表示向下取整,即取不大于给定数值的最大整数。对于任意实数 x,FLOOR(x) 返回满足 FLOOR(x) ≤ x < FLOOR(x) + 1 的整数值。

实际应用价值
  1. 数据标准化与分箱
    在时序数据分析中,FLOOR 可将连续型数据离散化为整数区间,便于分组统计和趋势分析。例如,将温度、电流等连续变量按整数分箱。

  2. 计费与账单场景
    在能源计费、流量计费等场景中,常使用 FLOOR 向下取整确保只对完整的计费单位收费,避免四舍五入导致的计费争议。

  3. 容量规划与资源分配
    在资源规划时,使用 FLOOR 向下取整可获得保守估计值,避免资源不足。例如,计算最大负载时向下取整确保系统稳定性。

  4. 数据质量检查
    通过对比原值与 FLOOR 后的值,可检测数据中的异常小数部分,用于数据质量监控和异常检测。

  5. 时间序列对齐
    在时间序列数据处理中,FLOOR 可用于将时间戳对齐到整数秒、分钟等边界,便于数据聚合和同步。

  6. 等级划分与分类
    根据数值向下取整结果进行等级划分,如能效等级、负载等级等,便于分类管理和决策支持。

注意事项

  • 负数处理FLOOR(-3.7) = -4,向下取整对负数会取更小的值(更负)。
  • 整数输入:对整数类型输入,FLOOR 返回原值。
  • NULL 处理:输入为 NULL 时返回 NULL。
  • 数据类型:不支持字符串、布尔、时间戳等非数值类型。
  • 精度问题:浮点数计算可能存在精度误差,建议关键场景下使用 DECIMAL 类型。
  • 性能优化:FLOOR 是标量函数,在 WHERE 子句中使用时无法利用索引,建议先过滤数据再计算。

相关函数

  • CEIL:向上取整,返回不小于给定值的最小整数
  • ROUND:四舍五入到最近的整数或指定小数位
  • ABS:绝对值函数
  • TRUNCATE:截断到指定小数位(不进行四舍五入)

这份用户手册详细介绍了 FLOOR 函数的数学意义、实际应用价值、返回值计算过程,以及在智能电表等物联网场景中的丰富应用示例。

关于 TDengine

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。

它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。

http://www.dtcms.com/a/488015.html

相关文章:

  • 第三方课题验收测试机构:【API测试工具Apifox使用指南】
  • 前端-APIs-day2
  • 织梦个人网站模板西安旅游
  • 个人网站设计与实现源码在线做网站黄
  • Highcharts 绘制之道(1):用数据构建基础图形
  • 【机器学习02】梯度下降、多维特征线性回归、特征缩放
  • 一个网站每年维护费用品牌营销网站
  • 有哪些做的很漂亮的网站商城小程序介绍
  • Vue3+Three.js:第05期 时间控制,requestAnimationFrame vs Clock
  • 松江做微网站电子商务网站的优点有那些
  • 个体营业执照网站备案做网站都需要用到什么
  • Python CGI 编程
  • 网页传奇平台优化关键词的作用
  • 定制网站建设和运营网站开发合同履约
  • java枚举能继承接口吗
  • 三分钟学懂3D建模中的UV Position Map
  • 广州网站推广公司wordpress 教学
  • 做外贸的网站哪个好cent7.4安装wordpress
  • 网站建设电话销售网站app生成器下载
  • 网站seo关键词排名优化wordpress自动发文章工具
  • /etc/login.defs vs chage:什么时候用什么?
  • 10.15 作业
  • seo短视频网页入口引流在线观看网站网站友情链接美化代码
  • 机器视觉旋转标定算法+补偿角度计算讲解(现场应用版)
  • 湖北网站推广公司技巧网站微信支付申请流程
  • 上海定制建站网站建设网站开发教育
  • 海关AEO认证:全球化企业的“通关护照”与“信用身份证”
  • 九号线香网站建设电子商务网站建设课后习题
  • Linux中比较两个字符串的前count个字符的汇编实现
  • 毕业论文与UML