# SQL SELECT MIN

The SQL Min() function is an aggregate function in SQL. SQL Min() returns the minimum value of a given condition. The expression may be numerical, or it may be an expression.

The syntax for the select min function:

```SELECT MIN(column_name)
FROM table_name WHERE conditions;```

Let’s take deep dive into the SQL SELECT MIN.

Consider the existing tables, which have the following records:

Table: Employees

 EMPLOYEEID FIRST_NAME LAST_NAME SALARY CITY DEPARTMENT MANAGERID 1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1 1002 VAIBHAV SHARMA 60000 NOIDA C# 5 1003 NIKHIL VANI 50500 JAIPUR FMW 2 2001 PRACHI SHARMA 55500 CHANDIGARH ORACLE 1 2002 BHAVESH JAIN 65500 PUNE FMW 2 2003 RUCHIKA JAIN 50000 MUMBAI C# 5 3001 PRANOTI SHENDE 55500 PUNE JAVA 3 3002 ANUJA WANRE 50500 JAIPUR FMW 2 3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3 4001 RAJESH GOUD 60500 MUMBAI TESTING 4 4002 ASHWINI BAGHAT 54500 NOIDA JAVA 3 4003 RUCHIKA AGARWAL 60000 DELHI ORACLE 1 5001 ARCHIT SHARMA 55500 DELHI TESTING 4

Example 1: Write a query that finds employees' minimum salary from the employees' table.

```SELECT MIN(SALARY) AS 'MINSALARY' FROM
EMPLOYEES;```

We find the minimum salary from the entire employees' table in the above query. The salary will display as the column name when the output is returned. We have aliased the Min (Salary) expression as min salary.

Output:

 MINSALARY 50000

As you can see that the minimum salary is 50000 from the employees' table.

Example 2: Write a query to find the minimum salary of employees whose city is Pune from the employees' table.

`SELECT CITY, MIN(SALARY) AS 'SALARY'  FROM EMPLOYEES WHERE CITY = 'PUNE';`

We have aliased min (Salary) in the above query, displayed as column name when output is returned. We have found the minimum salary of an employee whose city is Pune and displayed the city name.

Output:

 CITY SALARY PUNE 55500

As you can see, the minimum salary of an employee from Pune city is 55500.

Example 3: Write a query to find the employees' minimum salary from the employees' table of employees whose department is Oracle.

`SELECT DEPARTMENT, MIN(SALARY) AS 'MINIMUM_SALARY'  FROM EMPLOYEES WHERE DEPARTMENT = 'JAVA';`

In the above query, we have aliased min (Salary) as minimum_salary, displayed as column name when output is returned. We have found the minimum salary of an employee whose department is Java and displayed the department name.

Output:

 DEPARTMENT MINIMUM_SALARY JAVA 54500

As you can see, the minimum salary of an employee from the Java department is 54500.

Example 4: Write a query to find the minimum salary of employees whose department includes one of the lists is Oracle and FMW from the employees' table.

```SELECT MIN(SALARY) AS 'SALARY'  FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE',
'FMW');```

We have aliased min (Salary) in the above query, displayed as column name when output is returned. We have found the minimum salary of an employee whose department is oracle and FMW.

Output:

 SALARY 50500

Example 5: Write a query to find the minimum salary of employees whose salary is greater than 50000 and whose city includes Pune, Mumbai from the employees' table group by city.

```SELECT CITY, MIN(SALARY) AS EMPLOYEE_SALARY
FROM EMPLOYEES WHERE SALARY > 50000 AND CITY IN ('PUNE', 'MUMBAI') GROUP BY
CITY;```

In the above query, we have aliased Min (Salary) as EMPLOYEE_SALARY, displayed as column name when output is returned. We also used the GROUP BY clause followed by the city column. We have found the minimum salary of an employee whose salary is greater than 50000. Also, the employee city must be one of the names included in the city IN parameter. The Pune city will be grouped into one city of all the employees whose city is Pune and found the employees' salary, and the same approach is used for Mumbai city.

Output:

 CITY EMPLOYEE_SALARY MUMBAI 58500 PUNE 55500

In Mumbai city, the minimum salary is 58500, and Pune city's minimum salary is 55500.

Example 6: Write a query to find the minimum employee salary from the employee's table unique cities of employees group by city.

```SELECT CITY, MIN(DISTINCT SALARY) AS
'EMPLOYEE_SALARY' FROM EMPLOYEES GROUP BY CITY;```

In the above query, we have aliased min (DISTINCT salary) as Employee_salary, displayed as column name when output is returned. We have found the minimum employee salary from the employees' table considering unique cities in a group by city column.

Output:

 CITY EMPLOYEE_SALARY CHANDIGARH 55500 DELHI 55500 JAIPUR 50500 MUMBAI 50000 NOIDA 54500 PUNE 55500

Example 7:  Write a query to find the minimum employee salary from the employee's table unique department of employees group by the department.

```SELECT DEPARTMENT, MIN(DISTINCT SALARY)
AS 'EMPLOYEE_SALARY' FROM EMPLOYEES GROUP BY DEPARTMENT;```

In the above query, we have aliased min (DISTINCT salary) as Employee_salary, displayed as column name when output is returned. We have found the minimum employee salary from the employees' table considering unique departments grouped by department column.

Output:

 DEPARTMENT EMPLOYEE_SALARY C# 50000 FMW 50500 JAVA 54500 ORACLE 55500 TESTING 55500

Example 8: Write a query to find the minimum salary of the employee from the employee's table group by the city where the aggregate salary is greater than 50000

```SELECT CITY, MIN(SALARY) AS SALARY FROM
EMPLOYEES GROUP BY CITY HAVING MIN(SALARY) > 50000;```

We have aliased min (Salary) in the above query, displayed as column name when output is returned. We have found minimum emsployee salary from the employees' table followed group by city name and used having a condition where aggregate is greater than 50000.

Output:

 CITY SALARY CHANDIGARH 55500 DELHI 55500 JAIPUR 50500 NOIDA 54500 PUNE 55500

Here, we can see only cities with aggregate salaries are greater than 50000. Having a clause is like where clause. Having clause is used when we want to apply some condition to the aggregate function. We used having clause only when we used aggregate function in the query.

Example 9: Write a query to find an employee's minimum salary with a manager group.

```SELECT DEPARTMENT, MIN(SALARY) AS SALARY
FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER) GROUP BY
DEPARTMENT;```

We have aliased min (Salary) in the above query, displayed as column name when output is returned. Explanation of the above query, First sub-query will get executed (SELECT MANAGERID FROM MANAGER); as a result, we will get the employee ids, including the null value. After the sub-query is executed, the main query will get executed SELECT DEPARTMENT, MIN(SALARY) AS SALARY FROM EMPLOYEES WHERE MANAGERID IN (output of sub-query). In the IN operator of the main query, there is an employee's id, which is output from the sub-query according to the IN operator. We will get our final result which is the group by department name.

Output:

 DEPARTMENT SALARY C# 50000 FMW 50500 JAVA 54500 ORACLE 55500 TESTING 55500