SQL 方言通

首页 / 条件、空值和类型转换

GREATEST 多值取最大

GREATEST 返回参数中的最大值。差异主要在 NULL:StarRocks、Doris、Hive 2.0 起和 Flink 只要有一个参数为 NULL 就返回 NULL;MaxCompute 默认和 Spark 会跳过 NULL。同样的 SQL 迁移后可能从有值变成 NULL。LEAST 的规则相同。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持GREATEST(var1, var2[, ...])默认把 NULL 视为最小值,即跳过 NULL;开启 Hive 兼容模式(odps.sql.hive.compatible=true)后,任一参数为 NULL 时返回 NULL。类型不同时按规则隐式转换。官方文档
Hologres支持GREATEST(value1, value2, ...)文档没有说明 NULL 参数的处理方式,迁移前建议实测。官方文档
StarRocks支持GREATEST(expr1, ...)任一参数为 NULL 时返回 NULL。有 DOUBLE 参数时按 DOUBLE 比较;数字和字符串混合时,字符串能转成数字就按数字比较。官方文档
Doris支持GREATEST(expr[, ...])任一参数为 NULL 时返回 NULL。建议传入同类型参数,类型不同时会尝试转换。官方文档
Hive支持greatest(T v1, T v2, ...)Hive 1.1.0 起提供。2.0.0 起任一参数为 NULL 时返回 NULL,类型限制也放宽为与 > 运算符一致。官方文档
Spark SQL支持greatest(expr, ...)Spark 1.5.0 起提供,跳过 NULL 值。官方文档
Flink SQL支持GREATEST(value1[, value2]*)任一参数为 NULL 时返回 NULL。官方文档

迁移注意事项

示例

取两个时间中较晚的一个

MaxCompute
SELECT GREATEST(pay_time, ship_time) AS last_time FROM orders;
Hologres
SELECT GREATEST(pay_time, ship_time) AS last_time FROM orders;
StarRocks
SELECT GREATEST(pay_time, ship_time) AS last_time FROM orders;
Doris
SELECT GREATEST(pay_time, ship_time) AS last_time FROM orders;
Hive
SELECT greatest(pay_time, ship_time) AS last_time FROM orders;
Spark SQL
SELECT greatest(pay_time, ship_time) AS last_time FROM orders;
Flink SQL
SELECT GREATEST(pay_time, ship_time) AS last_time FROM orders;

同类函数

核对日期: · 提交勘误