TDengine 数学函数 GREATEST 用户手册
GREATEST 函数
语法
GREATEST(expr1, expr2 [, expr] ...)
功能说明
获得输入的所有参数中的最大值。该函数最小参数个数为 2 个,最大参数个数不限。
版本:v3.3.6.0
返回结果类型
根据输入参数的类型确定,按照类型提升规则选择范围最大的类型作为返回类型。
适用数据类型
- 数值类型:包括 bool 型、整型和浮点型
- 字符串类型:包括 nchar 和 varchar 类型
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
1. NULL 值处理
如果有任何一个参数为 NULL,则比较结果为 NULL。
举例:
taos> SELECT GREATEST(1, NULL, 3);greatest(1, null, 3) |
=======================NULL |taos> SELECT GREATEST(NULL, NULL);greatest(null, null) |
=======================NULL |
2. 字符串类型比较
如果所有参数都是字符串类型,按照字符串类型比较。
举例:
-- 纯字符串比较
taos> SELECT GREATEST('abc', 'def', 'xyz');greatest('abc', 'def', 'xyz') |
================================xyz |-- 中文字符串比较
taos> SELECT GREATEST('张三', '李四', '王五');greatest('张三', '李四', '王五') |
===================================王五 |
3. 数值类型比较
如果所有参数都是数值类型,则将它们作为数值类型进行比较。
举例:
-- 整数比较
taos> SELECT GREATEST(1, 5, 3);greatest(1, 5, 3) |
====================5 |-- 浮点数比较
taos> SELECT GREATEST(1.5, 2.3, 1.8);greatest(1.5, 2.3, 1.8) |
==========================2.3 |-- 混合数值类型比较
taos> SELECT GREATEST(10, 20.5, 15);greatest(10, 20.5, 15) |
=========================20.5 |
4. 混合类型比较
如果参数中既有字符串类型,也有数值类型,根据 compareAsStrInGreatest
配置项,统一作为字符串或者数值进行比较。
配置项说明:
compareAsStrInGreatest = 1
(默认): 统一转为字符串比较compareAsStrInGreatest = 0
: 统一转为数值类型比较
举例 1: 按字符串比较 (默认配置):
taos> SELECT GREATEST('100', 20, '5');greatest('100', 20, '5') |
===========================5 |-- 说明: 字符串比较时,'5' > '20' > '100'
举例 2: 按数值比较 (配置 compareAsStrInGreatest=0):
taos> SELECT GREATEST('100', 20, '5');greatest('100', 20, '5') |
===========================100 |-- 说明: 数值比较时,100 > 20 > 5
5. 类型自动提升
在所有情况下,不同类型比较时,比较类型会选择范围更大的类型进行比较。
举例:
-- TINYINT 和 BIGINT 比较,自动提升为 BIGINT
taos> SELECT GREATEST(CAST(10 AS TINYINT), CAST(9223372036854775807 AS BIGINT));greatest(cast(10 as tinyint), cast(9223372036854775807 as bigint)) |
======================================================================9223372036854775807 |-- FLOAT 和 DOUBLE 比较,自动提升为 DOUBLE
taos> SELECT GREATEST(CAST(1.5 AS FLOAT), CAST(1.6 AS DOUBLE));greatest(cast(1.5 as float), cast(1.6 as double)) |
====================================================1.600000000000000 |
应用场景
GREATEST 函数常用于在同一行数据中比较多个列的值,找出其中的最大值。以下是典型应用场景:
场景 1: 监控数据分析
比较同一时刻不同传感器的读数,找出最大值。
CREATE TABLE sensor_data (ts TIMESTAMP,sensor1 FLOAT,sensor2 FLOAT,sensor3 FLOAT
);INSERT INTO sensor_data VALUES('2024-01-01 10:00:00', 23.5, 24.8, 22.1),('2024-01-01 10:01:00', 25.2, 23.9, 26.3),('2024-01-01 10:02:00', 24.1, 25.5, 24.7);-- 找出每个时刻传感器的最高读数
taos> SELECT ts, sensor1,sensor2,sensor3,GREATEST(sensor1, sensor2, sensor3) AS max_readingFROM sensor_data;ts | sensor1 | sensor2 | sensor3 | max_reading |
=================================================================================2024-01-01 10:00:00.000 | 23.500 | 24.800 | 22.100 | 24.800000000000000|2024-01-01 10:01:00.000 | 25.200 | 23.900 | 26.300 | 26.300000000000000|2024-01-01 10:02:00.000 | 24.100 | 25.500 | 24.700 | 25.500000000000000|
场景 2: 学生成绩统计
比较一行学生记录中多门课程成绩,找出最高分。
CREATE TABLE student_scores (student_id INT,name VARCHAR(50),math INT,english INT,physics INT
);INSERT INTO student_scores VALUES(1, '张三', 85, 90, 78),(2, '李四', 92, 88, 95),(3, '王五', 78, 85, 82);-- 找出每个学生的最高分
taos> SELECT name,math,english,physics,GREATEST(math, english, physics) AS highest_scoreFROM student_scores;name | math | english | physics | highest_score |
=============================================================张三 | 85 | 90 | 78 | 90 |李四 | 92 | 88 | 95 | 95 |王五 | 78 | 85 | 82 | 85 |
场景 3: 库存管理
比较同一商品在不同仓库的库存量,找出最大库存。
CREATE TABLE inventory (product_id INT,product_name VARCHAR(50),warehouse_a INT,warehouse_b INT,warehouse_c INT
);INSERT INTO inventory VALUES(1, '商品A', 100, 150, 80),(2, '商品B', 200, 180, 220),(3, '商品C', 50, 60, 45);-- 找出每个商品的最大库存
taos> SELECT product_name,warehouse_a,warehouse_b,warehouse_c,GREATEST(warehouse_a, warehouse_b, warehouse_c) AS max_inventoryFROM inventory;product_name | warehouse_a | warehouse_b | warehouse_c | max_inventory |
===============================================================================商品A | 100 | 150 | 80 | 150 |商品B | 200 | 180 | 220 | 220 |商品C | 50 | 60 | 45 | 60 |
场景 4: 性能指标监控
比较同一时间点多个性能指标,找出峰值。
CREATE TABLE performance_metrics (ts TIMESTAMP,cpu_usage FLOAT,memory_usage FLOAT,disk_io FLOAT,network_io FLOAT
);INSERT INTO performance_metrics VALUES('2024-01-01 10:00:00', 65.5, 70.2, 45.8, 55.3),('2024-01-01 10:01:00', 80.1, 75.5, 90.2, 60.8),('2024-01-01 10:02:00', 55.8, 85.3, 50.1, 95.7);-- 找出每个时刻的最高性能指标
taos> SELECT ts,GREATEST(cpu_usage, memory_usage, disk_io, network_io) AS peak_metricFROM performance_metrics;ts | peak_metric |
=================================================2024-01-01 10:00:00.000 | 70.200000000000000|2024-01-01 10:01:00.000 | 90.200000000000000|2024-01-01 10:02:00.000 | 95.700000000000000|
配置说明
客户端配置项 compareAsStrInGreatest
:
- 为 1 表示同时存在字符串类型和数值类型时统一转为字符串比较
- 为 0 表示统一转为数值类型比较
- 默认为 1
配置方法:
# 在 /etc/taos/taos.cfg 配置文件中添加
compareAsStrInGreatest 1
注意事项
- NULL 值处理: 任何参数为 NULL 时,整体结果为 NULL
- 类型一致性: 建议比较相同类型的数据以获得预期结果
- 字符串排序: 字符串按字典序比较,可能与数值大小不同
- 性能考虑: 对大量数据使用时,建议在适当位置添加索引
- 参数数量: 最少 2 个参数,建议不超过 10 个参数以保证性能
相关函数
- LEAST: 返回所有参数中的最小值
- MAX: 聚合函数,返回列的最大值
- MIN: 聚合函数,返回列的最小值
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。