最后于 更新
MAX
描述
MAX 函数返回表达式的最大非 NULL 值。
版本差异:Doris 4.1 系列自 4.1.5 起,以及 Doris 4.2 及后续版本中,数组内的 NULL 元素大于非 NULL 元素;Doris 4.0 和 4.1.5 之前的 4.1 版本中数组内的 NULL 元素小于非 NULL 元素。整个数组值为 NULL 的输入在这些版本中均被忽略。
语法
MAX(<expr>)
参数
| 参数 | 描述 |
|---|---|
<expr> | 用于获取值的表达式。支持的类型包括 String、Time、Date、DateTime、Timestamptz、IPv4、IPv6、TinyInt、SmallInt、Integer、BigInt、LargeInt、Float、Double、Decimal、Array。 |
返回值
返回与输入表达式相同的数据类型。 如果组内所有记录均为 NULL,则函数返回 NULL。
版本行为变更(4.1.5)
Doris 4.1 系列自 4.1.5 起,比较数组等复杂类型时,相同位置的 NULL 元素大于非 NULL 元素。例如,[10, 20, NULL] 大于 [10, 20, 40]。这与整个表达式为 NULL 的情况不同:整个表达式为 NULL 的行仍会被忽略。4.1.5 之前,聚合比较将复杂类型内部的 NULL 元素视为较小值。
示例
-- setup
create table t1(
k1 int,
k_string varchar(100),
k_decimal decimal(10, 2),
k_array array<int>
) distributed by hash (k1) buckets 1
properties ("replication_num"="1");
insert into t1 values
(1, 'apple', 10.01, [10, 20, 30]),
(1, 'banana', 20.02, [10, 20]),
(2, 'orange', 30.03, [10, 20, 40]),
(2, null, null, [10, 20, null]),
(3, null, null, null);
建表成功,数据已插入。
select k1, max(k_string) from t1 group by k1 order by k1;
String 类型:对于每个分组,返回最大的字符串值。
+------+---------------+
| k1 | max(k_string) |
+------+---------------+
| 1 | banana |
| 2 | orange |
| 3 | NULL |
+------+---------------+
select k1, max(k_decimal) from t1 group by k1 order by k1;
Decimal 类型:返回最大的高精度小数值。
+------+----------------+
| k1 | max(k_decimal) |
+------+----------------+
| 1 | 20.02 |
| 2 | 30.03 |
| 3 | NULL |
+------+----------------+
select k1, max(k_array) from t1 group by k1 order by k1;
Array 类型:逐元素比较,返回最大的数组值;相同位置的 NULL 元素大于非 NULL 元素。
+------+----------------+
| k1 | max(k_array) |
+------+----------------+
| 1 | [10, 20, 30] |
| 2 | [10, 20, null] |
| 3 | NULL |
+------+----------------+
select max(k_string) from t1 where k1 = 3;
当组内所有值都为 NULL 时,返回 NULL。
+---------------+
| max(k_string) |
+---------------+
| NULL |
+---------------+
select max(k_string) from t1;
返回所有数据的最大值。
+---------------+
| max(k_string) |
+---------------+
| orange |
+---------------+