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真题
