> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firebolt.io/llms.txt
> Use this file to discover all available pages before exploring further.

> Reference material for MIN_BY

# MIN_BY

Returns the value of the first argument for the row that contains the minimum of the second argument. If the minimum of the second argument is not unique, an arbitrary non-NULL value of the first argument is returned from the set of rows that minimize the second argument. If the first argument is NULL for all rows minimizing the second argument, NULL is returned.

## Syntax

```sql theme={"theme":{"light":"css-variables","dark":"css-variables"}}
MIN_BY(<result>, <value>) [FILTER ([WHERE] <condition>)]
```

## Parameters

| Parameter     | Description                                                       | Supported input types |
| :------------ | :---------------------------------------------------------------- | :-------------------- |
| `<result>`    | The column from which the value is returned                       | Any type              |
| `<value>`     | The column that is minimized                                      | Any type              |
| `<condition>` | An optional boolean expression to filter rows used in aggregation | `BOOL`                |

## Return Types

Same as input type of `<result>`

## Example

The `tournaments` table contains the following data:

<div className="query-window">
  ```
  SELECT name, totalprizedollars FROM tournaments ORDER BY totalprizedollars LIMIT 5;
  ```

  | name <span>text null</span>          | totalprizedollars <span>int null</span> |
  | :----------------------------------- | :-------------------------------------- |
  | The French Grand Prix                | 237                                     |
  | The European Grand Prix              | 465                                     |
  | The Desert Dash Rally                | 643                                     |
  | The Turbocharged Championship Series | 704                                     |
  | The African Grand Prix               | 895                                     |

  <p><span>Rows: 5</span><span>Execution time: 6.00ms</span></p>
</div>

The following example finds the tournament name with the lowest prize amount in the `tournaments` table:

<div className="query-window">
  ```
  SELECT MIN_BY(name, totalprizedollars) AS minprizetournament FROM tournaments;
  ```

  | minprizetournament <span>text null</span> |
  | :---------------------------------------- |
  | The French Grand Prix                     |

  <p><span>Rows: 1</span><span>Execution time: 6.62ms</span></p>
</div>

When multiple rows minimize the second argument, an arbitrary non-`NULL` value of the first argument is chosen. The result of the following query is non-deterministic — either `'d'` or `'e'` may be returned, as both minimize `value` while having a non-`NULL` key:

<div className="query-window">
  ```
  SELECT MIN_BY(key, value)
  FROM UNNEST(
      ARRAY['a', NULL, 'c', 'd', 'e', NULL],
      ARRAY[10,  1,    100,  1,   1,  NULL]
  ) t(key, value);
  ```

  | min\_by <span>text null</span> |
  | :----------------------------- |
  | d                              |

  <p><span>Rows: 1</span><span>Execution time: 6.04ms</span></p>
</div>

If all rows minimizing the second argument have `NULL` in the first argument, `NULL` is returned:

<div className="query-window">
  ```
  SELECT MIN_BY(key, value) FROM UNNEST(
    ARRAY['a', NULL, 'c', 'd', NULL, 'f'],
    ARRAY[10, 1, 100, 2, 1, NULL]
  ) t(key, value);
  ```

  | min\_by <span>text null</span> |
  | :----------------------------- |
  | NULL                           |

  <p><span>Rows: 1</span><span>Execution time: 6.05ms</span></p>
</div>
