Returns the <value> from the row whose <key> is smallest among all rows in the aggregate (or within each group when used with GROUP BY).
Syntax
1min_by(<value>, <key>)
Arguments
Required
<value>: Any expression whose result is returned when its row wins the comparison. The aggregate result type matches this expression’s type.
<key>: The expression MIN-BYuses to order rows. The type must support comparison.
Returns
The <value> from the row with the minimum <key> among considered rows.
Null handling:
If the aggregate has no input rows (empty table or empty group), the result is NULL.
If every row has a NULL key, those rows are skipped; if no row has a non-NULL key, the result is NULL.
If the winning row’s <value> is NULL, the result is NULL (the key still determines which row wins).
Tie breaking:
When multiple rows share the same minimum key, one of the tied <value> results is returned; which tied row wins is implementation-dependent.
Considerations
Exactly two arguments are required (<value>, <key>). Calls with one argument or more than two arguments raise a syntax error.
You can combine min_by with other aggregates, GROUP BY, HAVING, subqueries, and expressions in the arguments (for example, max_by(upper(name), score * 2)).
min_by only supports a single value to sort on. To sort using multiple sort criteria, use FIRST_VALUE WITHIN GROUP.
Rows with a NULL<key> are ignored when searching for the minimum key.
Examples
Lowest scorer by score
Returns the name and score from the row with the lowest score.