max_by
Возвращает значение x, связанное с максимальным значением y.
Например, SELECT max_by(subject, exam_result) FROM exam; возвращает предмет с наивысшим баллом на экзамене.
Эта функция поддерживается начиная с версии 2.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)