Getting started with SQL MAX Function with Use Cases

By:   |   Updated: 2022-05-05   |   Comments (1)   |   Related: 1 | 2 | 3 | 4 | > Functions System


Problem

In this SQL tutorial, I will explain the Microsoft SQL Server aggregate function MAX() and its various use cases. Read this SQL tutorial to understand the way we can use it with other SQL statements.

Solution

The SQL MAX() function is used to return the maximum value from the specified expression. It is categorized under aggregate functions in SQL Server. Aggregate functions execute calculations on a set of values from a specified expression and return a single value in their output. This function ignores NULL values from specified columns and returns NULL if the output will not find any rows.

Below is the syntax of this SQL function:

SELECT MAX(column)
FROM table

We can also use SQL MAX with various other SQL database statements which I will describe to you with the help of use cases in the below section.

Use cases of SQL MAX statement

I have two tables, "Associates" and "OrderDetails". Table "Associates" stores information about sales associates and the "OrderDetails" table stores information on each order. I will use these two tables in the below use cases for this demonstration. Feel free to run the T-SQL SELECT statements in this tutorial on your set of tables. Make sure to change the table and column names from these SQL queries.

This section will describe the use cases of the SQL MAX statement as listed below:

Simple use case

As I stated above, this function will return the maximum value from the specific column. Here, I will show you how to use this function to get the highest or maximum value. I will use the table "OrderDetails" to list the highest invoice price stored in the column.

I will pass the Price column in the SQL MAX function as I have used in the below query to get our output.

SELECT MAX(price) AS [HighestInvoice]
FROM OrderDetails
GO

We can see our result set has returned the largest value invoice which is $9200.

query results

We can see the output has returned the maximum value for the Invoice irrespective of any filter. If we want to get the maximum invoice price from specific months, then we can apply a filter using the WHERE clause in the above query and get the result. Let's assume we have been tasked to get the highest invoice value or price from specified months like I have chosen from May, June, and July in the following query.

SELECT MAX(price) AS [HighestInvoice]
FROM OrderDetails
WHERE InvoiceMonth IN ('May', 'June', 'July')
GO

The highest invoice price is now showing as $8999 in the result set whereas it was $9200 in the above screenshot. This is because I have pulled maximum invoice data from only 3 months May, June, July that is specified in the above query.

query results

We have learned how to use the SQL MAX function in a basic scenario. Let's use it along with other SQL clauses in the next use cases of the below sections.

SQL MAX Function Examples with the WHERE Clause

This section will help you understand how to use the SQL MAX function in the WHERE clause. Let's assume you want to list out product details of the highest invoice along with other details like the month in which that invoice was generated. We will get this done using the SQL MAX function in the WHERE clause as given in the below query.

SELECT Product, InvoiceMonth, Price
FROM OrderDetails
WHERE price = (SELECT MAX(Price) from OrderDetails)
GO

Let's understand the result set returned by the above query. We can see the highest invoice of $9200 which was returned in the above section as well as generated in the month of August along with its product for which invoice was generated in the below screenshot.

query results

We can also use SQL JOINs in the above query to get other useful information from other tables like I have used JOIN on the second table Associates to list out which associate has created this invoice along with other details from that table.

SELECT name, od.City, Designation, InvoiceMonth, Price, Product
FROM Associates AS a
JOIN OrderDetails AS od ON a.ID=od.PersonID
WHERE price = (SELECT MAX(Price) from OrderDetails)
GO

You can see the result set of the above query. We got more details about our highest invoice.

query results

Here, we have learned the use of the SQL MAX function in the WHERE clause and with SQL JOINs.

Use SQL MAX function with GROUP BY statement

The SQL MAX function can also be used with the GROUP BY statement. Let me show you a use case to make you understand its uses. The GROUP BY statement groups rows that have the same values from the specified column and return the result. Here, I have grouped InvoiceMonth to list out the highest invoice from each month.

SELECT InvoiceMonth, MAX(Price) AS [HighestInvoice]
FROM OrderDetails
GROUP BY InvoiceMonth
GO

The below output is showing the result set in which we can see the highest invoice from each month.

query results

We can also apply filters with the help of the WHERE clause in the above query. If you want to fetch the highest invoice data for only specific months then you can use the WHERE clause as I have shown in the below query to return the highest invoice from June and July months.

SELECT InvoiceMonth, MAX(Price) AS [HighestInvoice]
FROM OrderDetails
WHERE InvoiceMonth IN ('June', 'July')
GROUP BY InvoiceMonth
GO

We have learned how to use GROUP BY statement with SQL MAX function in this section.

Use SQL MAX function with GROUP BY and ORDER BY statement

We can use the ORDER BY statement to display the result in an order. I have just added a line of code for the ORDER BY statement in the above query to list out results in a specific order.

SELECT InvoiceMonth, MAX(Price) AS [HighestInvoice]
FROM OrderDetails
GROUP BY InvoiceMonth
ORDER BY MAX(price)
GO

Have a look at the result set of the above query.

query results

This section has explained how to use GROUP BY and ORDER BY statements with SQL MAX function to list out highest invoice details for each month.

Use SQL MAX function with HAVING statement

The SQL HAVING statement is used if we need to apply filters on aggregate functions. Let's understand its uses with the help of the below example. The below query will list only those months which have the highest invoice as more than $4000.  I have just added one line of code for the HAVING statement.

SELECT InvoiceMonth, MAX(Price) AS [HighestInvoice]
FROM OrderDetails
GROUP BY InvoiceMonth
HAVING MAX(price) > 4000
GO

Here is its result set in which we can see only 2 rows for Aug and July. It means we have only these months in which the highest invoice is generated more than $4000.

query results

We can use any arithmetic operator with the HAVING statement to filter result as per desired need.

Use it with other aggregate functions like MIN, COUNT AVG, SUM

The SQL MAX function can also be used with other aggregate functions like MIN, COUNT, AVG, SUM, etc.

  • SQL MIN – This function will return the lowest or minimum value from the specified column.
  • SQL COUNT– This function will return the total count of the specified expression.
  • SQL AVG – We can get the average value of a specified column or expression using the SQL function AVG().
  • SQL SUM – If you want to get the sum of all values of a specified column or expression then you can use SQL function SUM().

Let me show you a use case in which I will use all the above aggregate functions to return their respective values as shown below.

SELECT      
   MAX(Price)   AS [HighestInvoice], 
   MIN(price)   AS [LowestInvoice], 
   SUM(Price)   AS [Total Invoice],
   COUNT(Price) AS [Number of Invoice],
   AVG(price)   AS [AverageInvoiceCost],
FROM OrderDetails
GO

Have a look at the result set of the above query in which I have returned the highest invoice, lowest invoice, total invoice, number of processed invoices, and average invoice cost of the table OrderDetais.

query results

If you want to see a similar view for each month then we can use the GROUP BY statement in the above query and get our desired output. See the below queries which will display all above outputs for each month from May to Aug.

SELECT 
   InvoiceMonth, 
   MAX(Price)   AS [HighestInvoice], 
   MIN(price)   AS [LowestInvoice], 
   SUM(Price)   AS [Total Invoice], 
   COUNT(Price) AS [Number of Invoice],
   AVG(price)   AS [AverageInvoiceCost],
FROM OrderDetails
GROUP BY InvoiceMonth
GO

You can easily correlate the result set to understand the query and its output by looking at the below image.

query results

This section has explained how to use other aggregate functions with the SQL MAX function.

Next Steps


sql server categories

sql server webinars

subscribe to mssqltips

sql server tutorials

sql server white papers

next tip



About the author
MSSQLTips author Manvendra Singh Manvendra Singh has over 5 years of experience with SQL Server and has focused on Database Mirroring, Replication, Log Shipping, etc.

This author pledges the content of this article is based on professional experience and not AI generated.

View all my tips


Article Last Updated: 2022-05-05

Comments For This Article




Monday, September 26, 2022 - 3:09:07 PM - Haim Back To Top (90526)
Hello
Thanks for the article very simple
How I can use the max value I retrieve?
I tried set max.......
and tried to use the alias but wasn't able to pass to a variable instead of just printing.
Thanks














get free sql tips
agree to terms