# MIN [Aggregate]

Returns the smallest value of an expression over a group of rows. The return value has the same type as the expression data type.

The `MIN` analytic function differs from the aggregate function, in that it returns the minimum value of an expression over a group of rows within a window.

Aggregate functions `MIN` and `MAX` can operate with Boolean values. `MAX `can act upon a Boolean data type or a value that can be implicitly converted to a Boolean. If at least one input value is true, `MAX` returns `t` (true). Otherwise, it returns `f` (false). In the same scenario, `MIN` returns `t` (true) if all input values are true. Otherwise it returns `f`.

## Syntax

`MIN ( expression )`

## Parameters

 expression Any expression for which the minimum value is calculated, typically a column reference.

## Examples

The following query returns the lowest salary from the `employee` dimension table.

This example shows how you can query to return the lowest salary from the `employee` dimension table.

```=> SELECT MIN(annual_salary) AS lowest_paid FROM employee_dimension;
lowest_paid
-------------
1200
(1 row)
```

The following example shows you the difference between the `MIN` and `MAX` aggregate functions when you use them with a Boolean value. The sample creates a table, adds two rows of data, and shows sample output for `MIN` and `MAX`.

```=> CREATE TABLE min_max_functions (torf BOOL);

=> INSERT INTO min_max_functions VALUES (1);
=> INSERT INTO min_max_functions VALUES (0);

=> SELECT * FROM min_max_functions;
torf
------
t
f
(2 rows)

=> SELECT min(torf) FROM min_max_functions;
min
-----
f
(1 row)

=> SELECT max(torf) FROM min_max_functions;
max
-----
t
(1 row)```