Partager via


Fonction d’agrégation max_by

S’applique à :case marquée oui Databricks SQL case marquée oui Databricks Runtime

Retourne la valeur d’une expression associée à la plus grande valeur d’une deuxième expression dans un groupe. Avec le troisième argument facultatif, retourne un tableau de valeurs pouvant correspondre aux limit valeurs les plus importantes de l’expression de classement.

Syntaxe

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

Cette fonction peut également être appelée en tant que fonction de fenêtre à l’aide de la clause OVER.

Arguments

  • expr : expression dont la valeur doit être retournée. Il peut s’agir de n’importe quel type de données.
  • ordExpr : expression utilisée pour déterminer la valeur maximale (la clé de tri). Doit être un type ordonné.
  • limite : (Facultatif) Valeur INT représentant le nombre maximal de valeurs à retourner. Doit être supérieur à 0 et inférieur ou égal à 100 000. Lorsqu’elle est fournie, la fonction retourne un tableau allant jusqu’à limit des valeurs.
  • cond : expression booléenne facultative filtrant les lignes utilisées pour l’agrégation.

Retours

Sans limit: le type de résultat correspond au type de expr. Si plusieurs lignes ont la même valeur maximale, ordExprle résultat est non déterministe.

Avec limit: une ARRAY valeur dont le type d’élément correspond au type de expr. Le tableau contient jusqu’à des limit éléments. Les valeurs correspondant aux NULL classements ne sont pas incluses. Si toutes les valeurs de classement sont NULL, le résultat est NULL. Si plusieurs lignes partagent les mêmes valeurs les plus importantes, la fonction n’est pas déterministe.

Remarque

Pour certains classements STRING, tels que UTF8_LCASE, le résultat peut également être non déterministe.

Exemples

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