MAX_BY()

MAX_BY(value, order_by, tie_breaker) 返回每个分组中 order_by 最大值的行所对应的 value,从而可以在不进行自连接或窗口函数的情况下选出最新、最大或排名最高的行。

描述

MAX_BY(value, order_by, tie_breaker) 是一个聚合函数,用于找出每个分组中 order_by 值最大的行,并返回该行的 value。可选的 tie_breaker 参数用于确定性处理并列情况:当多行的 order_by 值相同时,选择 tie_breaker 最大的那一行。

该函数常用于在不进行自连接或窗口函数的情况下获取“最新记录的值”。

语法

MAX_BY(value, order_by [, tie_breaker])

参数

参数

说明

value

为选中行返回的列或表达式。

order_by

决定选中哪一行的列或表达式,最大值胜出。

tie_breaker

可选。用于在 order_by 值相同的行之间打破并列的第三个表达式。

返回值

返回 order_by 值最大的行的 value。如果选中行的 valueNULL,则结果为 NULL

示例

DROP DATABASE IF EXISTS max_by_demo;
CREATE DATABASE max_by_demo;
USE max_by_demo;

CREATE TABLE readings (grp INT, value VARCHAR(20), ts BIGINT, tie VARCHAR(20));
INSERT INTO readings VALUES
    (1, 'older', 10, 'a'),
    (1, 'latest-a', 12, 'a'),
    (1, 'latest-z', 12, 'z'),
    (2, 'kept', 1, 'a'),
    (3, 'alpha', 5, 'same'),
    (3, 'beta', 5, 'same');
SELECT grp, MAX_BY(value, ts, tie) AS latest_value
FROM readings GROUP BY grp ORDER BY grp;

DROP DATABASE max_by_demo;