次の方法で共有


max_by 集計関数

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

グループ内の 2 番目の式の最大値に関連付けられている式の値を返します。 省略可能な 3 番目の引数を使用して、順序式の最大値に対応する最大 limit 値の配列を返します。

構文

max_by(expr, ordExpr) [FILTER ( WHERE cond ) ]
max_by(expr, ordExpr, limit) [FILTER ( WHERE cond ) ]

この関数は、 句を使用して OVERとして呼び出すこともできます。

引数

  • expr: 値が返される式。 任意のデータ型を指定できます。
  • ordExpr: 最大値 (並べ替えキー) を決定するために使用される式。 順序指定可能な型である必要があります。
  • limit: (省略可能) 返す値の最大数を表す INT 値。 0 より大きく、100,000 以下である必要があります。 指定すると、関数は最大 limit 値の配列を返します。
  • cond: 集計に使用される行をフィルター処理する省略可能なブール式。

戻り値

limitなし: 結果の型はexprの型と一致します。 複数の行の最大値が同じ ordExpr場合、結果は非決定論的になります。

limit: 要素型がexprの型と一致する値のARRAY。 配列には、最大 limit の要素が含まれています。 NULL順序に対応する値は含まれません。 すべての順序付け値が NULL場合、結果は NULL。 複数の行が同じ最大値を共有する場合、関数は非決定論的です。

特定の STRING 照合順序 (UTF8_LCASE など) の場合、結果も非決定論的である可能性があります。

> SELECT max_by(x, y, 2) FROM VALUES (('a', 10)), (('b', 50)), (('c', 20)) AS tab(x, y);
 [b, c]

-- Return top 2 values by ordering expression
> SELECT year, max_by(course, earnings, 2) FROM data GROUP BY year;
 year: 2012, max_by(course, earnings, 2): [Java, c]

> SELECT max_by(x, y COLLATE UTF8_LCASE) FROM VALUES (('a', 'X')), (('b', 'x')), (('c', 'v')) AS tab(x, y);
 a (or b)