MAX() Function in MySQL

Introduction
Identifying highest values across datasets is crucial for ranking and analysis.
MAX() function returns largest value from non-NULL values in column.
It is widely used for:

  • Record dates
  • Highest prices
  • Top scores

What is MAX() Function
MAX() returns maximum non-NULL value in specified column or expression.
Ignores NULL values automatically.

Basic Syntax

sql

SELECT MAX(column_name) FROM table_name; 

Example

sql

SELECT MAX(marks) as highest_marks FROM Students; 

Returns highest mark scored by any student.

MAX with GROUP BY
Maximum per category.

sql

SELECT city, MAX(marks) as highest_city_mark 

FROM Students 

GROUP BY city; 

MAX with WHERE
Conditional maximums.

sql

SELECT MAX(marks) FROM Students 

WHERE status = 'Active'; 

MAX with Multiple Aggregates
Combine statistics.

sql

SELECT city, 

       MAX(marks) as highest, 

       MIN(marks) as lowest, 

       AVG(marks) as average 

FROM Students 

GROUP BY city; 

MAX with ORDER BY
Sort by maximum values.

sql

SELECT department, MAX(marks) as dept_highest 

FROM Students 

GROUP BY department 

ORDER BY dept_highest DESC

MAX with JOIN
Maximum across relationships.

sql

SELECT c.course_name, MAX(s.marks) as course_highest 

FROM Students s 

JOIN Courses c ON s.course_id = c.id 

GROUP BY c.id, c.course_name; 

MAX with HAVING
Filter groups by maximum.

sql

SELECT city, MAX(marks) as highest_mark 

FROM Students 

GROUP BY city 

HAVING MAX(marks) > 95; 

Multiple MAX Functions
Different criteria maximums.

sql

SELECT city,

       MAX(CASE WHEN status = 'Active' THEN marks END) as active_max,

       MAX(CASE WHEN marks > 0 THEN marks END) as valid_max

FROM Students

GROUP BY city;

MAX with Subquery
Find records matching maximum.

sql

SELECT name, marks 

FROM Students 

WHERE marks = (SELECT MAX(marks) FROM Students WHERE marks IS NOT NULL); 

MAX on Dates
Latest record.

sql

SELECT MAX(join_date) as latest_join FROM Students; 

MAX on Strings
Lexicographically largest.

sql

SELECT MAX(city) as last_city FROM Students; 

MAX with COALESCE
Handle all-NULL results.

sql

SELECT COALESCE(MAX(marks), 0) as safe_max FROM Students; 

Execution Order with MAX
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

Performance Considerations

  • MAX very fast with indexes
  • MAX(DISTINCT) slower
  • Index columns used in MAX
  • Works well with sorted data

Important Notes

  • Ignores NULL values
  • Empty set returns NULL
  • Works with numbers, dates, strings
  • String MAX uses collation order
  • MAX(DISTINCT) removes duplicates first

Example Scenario
Top course performers:

sql

SELECT

    c.course_name,

    COUNT(s.id) as total_students,

    MAX(s.marks) as highest_score,

    MIN(s.marks) as lowest_score,

    ROUND(AVG(s.marks), 2) as average

FROM Courses c

LEFT JOIN Students s ON c.id = s.course_id

GROUP BY c.id, c.course_name

HAVING MAX(s.marks) > 90

ORDER BY highest_score DESC;

Common Mistakes

  • MAX on non-indexed columns
  • Surprised by NULL exclusion
  • MAX(DISTINCT) performance overhead
  • String collation affecting results
  • Forgetting COALESCE for NULL results

Key Points to Remember

  • MAX finds largest non-NULL value
  • GROUP BY + MAX = category maximums
  • Works with numbers, dates, strings
  • Very fast with proper indexes
  • Ignores NULLs automatically
  • COALESCE(MAX(), default) for safety