max_by
y の最大値に関連付けられた x の値を返します。
例えば、SELECT max_by(subject, exam_result) FROM exam; は、最高の試験スコアを持つ科目を返します。
この関数は v2.5 からサポートされています。
Syntax
max_by(x,y)
Parameters
x: 任意のタイプの式。y: 順序付け可能なタイプの式。
Return value
x と同じタイプの値を返します。
Usage notes
yはソート可能なタイプでなければなりません。bitmapやhllのようなソート不可能なタイプのyを使用すると、エラーが返されます。yに null 値が含まれている場合、その null 値に対応する行は無視されます。- 複数の
xの値が同じ最大値のyを持つ場合、この関数は最初に見つかったxの値を返します。
Examples
-
テーブル
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の 2 つの科目が同じ最高スコア95を持ち、最初に見つかった科目 (physics) が返されます。SELECT max_by(subject, exam_result) FROM exam;+------------------------------+| max_by(subject, exam_result) |+------------------------------+| physics |+------------------------------+1 row in set (0.01 sec)