跳到主要内容

greatest:取多个值中最大值

速查结论

greatest(expr, ...) 是 Spark SQL 中用于取多个值中最大值的函数。自动跳过 NULL 值。与 max 聚合函数的区别:greatest 是行级函数(比较同一行的多个列),max 是聚合函数(比较多行的同一列)。

语法

greatest(expr, ...)

参数说明

参数说明
expr两个或更多可比较的表达式

返回值:所有参数中的最大值,跳过 NULL 值。所有参数都为 NULL 时返回 NULL。

Since: 1.5.0

示例

基础用法

-- 取多个值中的最大值
SELECT greatest(10, 9, 2, 4, 3);
-- 结果: 10

列间比较

-- 取多列中的最大值(如多次考试成绩的最高分)
SELECT
student_id,
greatest(exam1, exam2, exam3) AS best_score
FROM scores;

-- NULL 自动跳过
SELECT greatest(10, NULL, 5);
-- 结果: 10

greatest vs least vs max 对比

函数作用范围返回适用场景
greatest(a, b, c)行内多列/多值最大值同一行多列比较
least(a, b, c)行内多列/多值最小值同一行多列比较
max(col)聚合多行最大值多行同一列聚合
-- greatest: 行内比较
SELECT greatest(col1, col2, col3) FROM t;

-- max: 行间聚合
SELECT max(col1) FROM t;

常见报错与避坑指南

所有参数为 NULL

当所有参数都是 NULL 时,返回 NULL 而非报错。

SELECT greatest(NULL, NULL);
-- 结果: NULL
📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看