メインコンテンツまでスキップ

max_by

#max_by

説明

yの最大値に関連付けられたxの値を返します。

例えば、SELECT max_by(subject, exam_result) FROM exam;は、最高の試験結果を持つ科目を返します。

この関数はv2.5からサポートされています。

構文

max_by(x, y)

パラメータ

  • x:任意の型の式。
  • y:順序付け可能な型の式。

返り値

xと同じ型の値を返します。

使用上の注意

  • yはソート可能な型である必要があります。bitmaphllなど、ソート不可能な型のyを使用するとエラーが返されます。
  • yにnull値が含まれている場合、null値に対応する行は無視されます。
  • xの複数の値がyの最大値と同じである場合、この関数は最初に遭遇したxの値を返します。

  1. examというテーブルを作成します。

    CREATE TABLE exam (
    subject_id INT,
    subject STRING,
    exam_result INT
    ) DISTRIBUTED BY HASH(`subject_id`);
  2. このテーブルに値を挿入し、このテーブルからデータをクエリします。

    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)
  3. 最高得点を持つ科目を取得します。 physicsmusicの2つの科目が最高得点95を持っており、最初に遭遇した科目(physics)が返されます。

    SELECT max_by(subject, exam_result) FROM exam;
    +------------------------------+
    | max_by(subject, exam_result) |
    +------------------------------+
    | physics |
    +------------------------------+
    1 row in set (0.01 sec)