Compartir vía


max_by (función de agregado)

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Devuelve el valor de una expresión asociada al valor más grande de una segunda expresión de un grupo. Con el tercer argumento opcional, devuelve una matriz de hasta valores correspondientes a limit los valores más grandes de la expresión de ordenación.

Sintaxis

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

Esta función también se puede invocar como una función de ventana mediante la cláusula OVER.

Argumentos

  • expr: expresión cuyo valor se va a devolver. Puede ser cualquier tipo de datos.
  • ordExpr: expresión usada para determinar el valor máximo (la clave de ordenación). Debe ser un tipo ordenable.
  • limit: (Opcional) Valor INT que representa el número máximo de valores que se van a devolver. Debe ser mayor que 0 y menor o igual que 100 000. Cuando se proporciona, la función devuelve una matriz de hasta limit valores.
  • cond: expresión booleana opcional que filtra las filas usadas para la agregación.

Devoluciones

Sin limit: el tipo de resultado coincide con el tipo de expr. Si varias filas tienen el mismo valor máximo de ordExpr, el resultado es no determinista.

Con limit: de ARRAY valores cuyo tipo de elemento coincide con el tipo de expr. La matriz contiene hasta limit elementos. No se incluyen los valores correspondientes a NULL las ordenaciones. Si todos los valores de ordenación son NULL, el resultado es NULL. Si varias filas comparten los mismos valores más grandes, la función no es determinista.

Nota

Para ciertas intercalaciones de STRING, como UTF8_LCASE, el resultado también puede ser no determinista.

Ejemplos

> 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)