All Products
Search
Document Center

MaxCompute:MAX_BY

Last Updated:May 26, 2025

Returns the value of the valueToReturn column that corresponds to the maximum value in the valueToMaximize column. This function is an extension function of MaxCompute 2.0.

Usage notes

  • MaxCompute V2.0 provides additional functions. If the functions that you use involve new data types, including TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, and BINARY, you must execute a statement to enable the MaxCompute V2.0 data type edition:

    • Session level: Add set odps.sql.type.system.odps2=true; before the SQL statement that you want to execute, and commit and execute them together.

    • Project level: The project owner can enable the MaxCompute V2.0 data type edition for the project based on the project requirements. Statement:

      setproject odps.sql.type.system.odps2=true;

      The configuration takes effect after 10 to 15 minutes.

      For more information about setproject, see Project operations. For more information about the precautions that you must take when you enable the MaxCompute V2.0 data type edition at the project level, see Data type editions.

  • If you use an SQL statement that includes multiple aggregate functions and the project resources are insufficient, memory overflow may occur. We recommend that you optimize the SQL statement or purchase computing resources based on your business requirements.

Syntax

Note

The MAX_BY function provides the same feature as the ARG_MAX function. However, the functions differ in the parameter order. The MAX_BY function is introduced in MaxCompute to maintain compatibility with the open source syntax.

max_by(<valueToReturn>,<valueToMaximize>)

Parameters

  • valueToMaximize: Required. Values of any data type.

  • valueToReturn: Required. Values of any data type.

Return value type

The return value is of the same type as valueToReturn. If multiple rows contain the maximum value, the function randomly returns the value from one of these rows. If the valueToMaximize value is NULL, the row is not involved in the calculation.

Sample data

This section provides sample source data and examples for you to understand how to use the functions. Create a table named emp and insert the sample data into the table. Sample statement:

create table if not exists emp
   (empno bigint,
    ename string,
    job string,
    mgr bigint,
    hiredate datetime,
    sal bigint,
    comm bigint,
    deptno bigint);
tunnel upload emp.txt emp; -- Replace emp.txt with the actual path (path and name) to which you upload the data file.

The emp.txt file contains the following sample data:

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

Examples

  • Example 1: Return the name of the employee with the highest salary. Sample statement:

    select max_by(ename,sal) from emp;

    Output:

    +------------+
    | _c0        |
    +------------+
    | KING       |
    +------------+
  • Example 2: Use the function with group by to group all employees by department (deptno) and return the name of the employee with the highest salary in each group. Sample statement:

    select deptno, max_by(ename,sal) from emp group by deptno;

    Output:

    +------------+------------+
    | deptno     | _c1        |
    +------------+------------+
    | 10         | KING       |
    | 20         | SCOTT      |
    | 30         | BLAKE      |
    +------------+------------+

Related functions

MAX_BY is an aggregate function. For more information about functions that calculate the average value or aggregate parameters from multiple input records, see Aggregate functions.