MySQL: Using ORDER BY to sort records in SELECT statement

Updated: January 25, 2024 By: Guest Contributor Post a comment

Introduction

Sorting data is a fundamental feature in database systems such as MySQL. Whether you’re developing a report, creating a user-friendly interface, or just trying to make sense of your data, sorting data can help clarify insights and allow for better understanding. The SQL standard for sorting data is the ORDER BY clause, which comes into play when using SELECT statements. In this tutorial, we will explore how to utilize the ORDER BY clause within MySQL to organize your records effectively.

Basic Usage of ORDER BY

The most basic form of ORDER BY is to sort results in ascending order, which is the default setting when you use this clause. Consider the following table named ’employees’:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
1   John    Marketing       2021-04-12
2   Jane    Sales           2020-08-09
3   Bob     IT              2019-07-15
4   Alice   Marketing       2021-01-22

If we want to order these employees by their name in ascending order, we would use the following query:

SELECT * FROM employees
ORDER BY Name ASC;

The result would be:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
4   Alice   Marketing       2021-01-22
3   Bob     IT              2019-07-15
2   Jane    Sales           2020-08-09
1   John    Marketing       2021-04-12

Descending Order

Often, you will want to reverse the order of the sort, particularly when dealing with numerical values where you might want the higher values first, or perhaps with dates when you want the most recent. This is where DESC comes in:

SELECT * FROM employees
ORDER BY Join_Date DESC;

The query will sort the employees based on their join date from newest to oldest:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
1   John    Marketing       2021-04-12
4   Alice   Marketing       2021-01-22
2   Jane    Sales           2020-08-09
3   Bob     IT              2019-07-15

Sorting By Multiple Columns

There are scenarios when you need to sort by more than one column. For example, if you want to sort employees first by their department in ascending order, and then by name in alphabetical order:

SELECT * FROM employees
ORDER BY Department ASC, Name ASC;

The result will appear as follows:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
3   Bob     IT              2019-07-15
4   Alice   Marketing       2021-01-22
1   John    Marketing       2021-04-12
2   Jane    Sales           2020-08-09

ORDER BY with WHERE Clause

The ORDER BY clause is often combined with the WHERE clause to filter and sort data simultaneously. Let’s sort the employees from the ‘Sales’ department by join date:

SELECT * FROM employees
WHERE Department = 'Sales'
ORDER BY Join_Date ASC;

This will give us a list of employees in the sales department sorted by their join date:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
2   Jane    Sales           2020-08-09

Sorting With Expressions

You can also sort based on expressions or functions. For instance, let’s sort the employees by the month of their join date:

SELECT *, MONTH(Join_Date) AS Join_Month FROM employees
ORDER BY Join_Month ASC;

The records will be ordered by the numerical value of their join month, regardless of the actual year they joined:

ID  Name    Department      Join_Date    Join_Month
--  ------  -----------     ---------    ----------
4   Alice   Marketing       2021-01-22   1
3   Bob     IT              2019-07-15   7
2   Jane    Sales           2020-08-09   8
1   John    Marketing       2021-04-12   4

Advanced Sorting With CASE

For more control over sorting, a CASE expression within ORDER BY can be used. Imagine if we wanted to order employees by the following custom rule: ‘Sales’ department employees first, followed by ‘Marketing’, and then ‘IT’. Here is how we can achieve this:

SELECT * FROM employees
ORDER BY CASE Department
  WHEN 'Sales' THEN 1
  WHEN 'Marketing' THEN 2
  WHEN 'IT' THEN 3
  ELSE 4
END;

This effectively assigns a temporary sorting weight to each department, with the desired order reflecting in the results:

ID  Name    Department      Join_Date
--  ------  -----------     ---------
2   Jane    Sales           2020-08-09
1   John    Marketing       2021-04-12
4   Alice   Marketing       2021-01-22
3   Bob     IT              2019-07-15

Conclusion

In conclusion, the ORDER BY clause is a powerful tool that allows for the sorting of query results in MySQL. It gives flexibility not only to sort by individual columns but also by expressions and custom criteria using the CASE statement. Through the structured use of ORDER BY, you can easily manage and understand your data within your databases.