ORDER BY
When we’re writing a SQL query, we’ll often want to specify the order of the rows in our result set. For example:
- if we want to fetch a list of people, sorted by age
- if we want to fetch a list of events, sorted by date
- if we want to fetch a list of test scores, sorted from highest to lowest (or vice versa)
In SQL, we use the ORDER BY
clause to achieve this. By adding an ORDER BY
clause onto the end of our query, we can sort our rows in ascending or descending order, by one or more columns.
Sorted in ascending order (default)
Take a look at this simple query:
SELECT *
FROM students
ORDER BY first_name
This query will return all rows from the students
table, sorted by first_name
in ascending order (the default sort order):
Sorted in descending order
If we wanted to place the results in descending order instead, we’d add the DESC
operator just after the column we’re sorting by (in this case, that’s the first_name
column):
SELECT *
FROM students
ORDER BY first_name DESC
This query will return all rows from the students
table, sorted by first_name
in descending order:
Ordering by numbers
We can also sort our results by numeric columns. For example, if we wanted to fetch all the students from the students
table, sorted in descending order by age
, we’d write:
SELECT *
FROM students
ORDER BY age DESC
Ordering by multiple columns
Sometimes, we’ll want to sort our results by multiple columns. For example, we might want to sort the students first by class
, and then, within each class, sort the students by first_name
. We could achieve this by writing:
SELECT *
FROM students
ORDER BY class ASC, first_name DESC
This query will return all rows from the students
table, sorted first by class
in ascending order and then by first_name
in descending order. This means that, if there are multiple rows with the same class
, those rows will be further sorted by first_name
in descending order.
Note: I’ve added the ASC
operator to make it clear that the class
should be sorted in ascending order. But since ascending order is the default sort order, it’s not strictly necessary to include this operator, and we could just as well write:
SELECT *
FROM students
ORDER BY class, first_name DESC
Practice
Now it's your turn! Open the following questions in a new tab to try out the ORDER BY
clause: