max_by
返回与y
的最大值关联的x
的值。
例如,SELECT max_by(subject, exam_result) FROM exam;
是返回考试成绩最高的科目。
此函数从 v2.5 版本开始支持。
语法
max_by(x,y)
参数
x
:任何类型的表达式。y
:可以排序的类型的表达式。
返回值
返回与x
具有相同类型的值。
使用说明
y
必须是可排序的类型。如果使用不可排序的y
类型,例如bitmap
或hll
,则会返回错误。- 如果
y
包含空值,则忽略与空值对应的行。 - 如果
x
的多个值具有相同的y
最大值,则此函数返回遇到的x
的第一个值。
示例
-
创建一个表
exam
。CREATE TABLE exam (
subject_id INT,
subject STRING,
exam_result INT
) DISTRIBUTED BY HASH(`subject_id`); -
将值插入此表并从此表查询数据。
insert into exam values
(1,'math',90),
(2,'english',70),
(3,'physics',95),
(4,'chemistry',85),
(5,'music',95),
(6,'biology',null);
select * from exam order by subject_id;
+------------+-----------+-------------+
| subject_id | subject | exam_result |
+------------+-----------+-------------+
| 1 | math | 90 |
| 2 | english | 70 |
| 3 | physics | 95 |
| 4 | chemistry | 85 |
| 5 | music | 95 |
| 6 | biology | null |
+------------+-----------+-------------+
6 rows in set (0.03 sec) -
获取得分最高的科目。两个科目
physics
和music
具有相同的最高分95
,并返回遇到的第一个科目 (physics
)。SELECT max_by(subject, exam_result) FROM exam;
+------------------------------+
| max_by(subject, exam_result) |
+------------------------------+
| physics |
+------------------------------+
1 row in set (0.01 sec)