MAX_BY函数返回valueToMaximize列中最大值对应的valueToReturn列的值。此函数为MaxCompute 2.0扩展函数。
命令格式
MAX_BY(<valueToReturn>, <valueToMaximize>)功能介绍
MAX_BY 函数返回 valueToMaximize 取最大值时对应行的 valueToReturn 值。即在所有行中找到 valueToMaximize 最大的那一行,返回该行的 valueToReturn。
MAX_BY 与ARG_MAX 功能相同,参数顺序不同。MAX_BY 兼容开源语法。
在同一条SQL语句中同时使用多个聚合函数时,如果项目资源不足,会出现内存溢出问题,请根据实际业务情况优化SQL或购买计算资源。
参数说明
valueToMaximize:必填。可以为任意类型。用于比较大小、确定目标行的列或表达式。
valueToReturn:必填。可以为任意类型。从目标行中取出并返回的值。
说明
如果函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行相关语句开启2.0数据类型开关:
Session级别:在SQL语句前添加
SET odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。Project级别:项目所有者通过
setproject odps.sql.type.system.odps2=true;设置整个项目的数据类型。
返回值说明
返回值类型与valueToReturn类型相同。若存在多行并列最大值,随机返回其中一行的值。valueToMaximize 为 NULL 的行不参与计算。
使用示例
示例数据
创建表
dept_salCREATE TABLE IF NOT EXISTS dept_sal ( deptno BIGINT, ename STRING, sal BIGINT );插入测试数据
INSERT INTO dept_sal VALUES (10, 'KING', 5000), (10, 'CLARK', 2450), (10, 'MILLER', 1300), (20, 'SCOTT', 3000), (20, 'FORD', 3000), (20, 'JONES', 2975), (30, 'BLAKE', 2850), (30, 'ALLEN', 1600), (30, 'WARD', 1250);
示例一:查询薪资最高的员工姓名
SELECT MAX_BY(ename, sal) FROM dept_sal;
-- 返回结果:
+------+
| _c0 |
+------+
| KING |
+------+示例二:查询每个部门中薪资最高的员工姓名
SELECT deptno, MAX_BY(ename, sal) AS top_earner
FROM dept_sal
GROUP BY deptno;
-- 返回结果:
+------------+------------+
| deptno | top_earner |
+------------+------------+
| 10 | KING |
| 20 | SCOTT |
| 30 | BLAKE |
+------------+------------+相关函数
该文章对您有帮助吗?