max_by statistische functie

Van toepassing op:met vinkje gemarkeerd als ja Databricks SQL met vinkje gemarkeerd als ja Databricks Runtime

Retourneert de waarde van een expressie die is gekoppeld aan de grootste waarde van een tweede expressie in een groep. Met het optionele derde argument wordt een matrix geretourneerd van maximaal limit waarden die overeenkomen met de grootste waarden van de orderexpressie.

Syntaxis

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

Deze functie kan ook worden aangeroepen als een vensterfunctie met behulp van de OVER component.

Argumenten

  • expr: De expressie waarvan de waarde moet worden geretourneerd. Dit kan elk gegevenstype zijn.
  • ordExpr: de expressie die wordt gebruikt om de maximumwaarde (de sorteersleutel) te bepalen. Moet een bestelbaar type zijn.
  • limiet: (Optioneel) Een INT waarde die het maximum aantal waarden aangeeft dat moet worden geretourneerd. Moet groter zijn dan 0 en kleiner dan of gelijk aan 100.000. Indien opgegeven, retourneert de functie een matrix van maximaal limit waarden.
  • cond: Een optionele Booleaanse expressie die de rijen filtert die worden gebruikt voor aggregatie.

Retouren

Zonder limit: het resultaattype komt overeen met het type expr. Als meerdere rijen dezelfde maximumwaarde ordExprhebben, is het resultaat niet-deterministisch.

Met limit: een ARRAY van de waarden waarvan het elementtype overeenkomt met het type expr. De matrix bevat maximaal limit elementen. Waarden die overeenkomen met NULL volgordes, worden niet opgenomen. Als alle volgordewaarden zijn NULL, is NULLhet resultaat . Als meerdere rijen dezelfde grootste waarden delen, is de functie niet-deterministisch.

Notitie

Voor bepaalde STRING sorteringen, zoals UTF8_LCASE, kan het resultaat ook niet-deterministisch zijn.

Voorbeelden

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