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])
参数¶
参数 |
说明 |
|---|---|
|
为选中行返回的列或表达式。 |
|
决定选中哪一行的列或表达式,最大值胜出。 |
|
可选。用于在 |
返回值¶
返回 order_by 值最大的行的 value。如果选中行的 value 为 NULL,则结果为 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;