As a database developer who has worked with PostgreSQL for an extended period, I’ve learned the usage and flexibility of the ORDER BY clause. I’ll explain everything you need to know about the PostgreSQL ORDER BY clause with multiple examples in this article.
Postgresql order by
In Postgresql, the ORDER BY clause allows us to sort rows returned by a SELECT clause in ascending or descending order based on a sort expression. When we query data from a table, the SELECT statement returns rows in an unspecified order.
We use the ORDER BY clause in the SELECT statement to sort the rows of the result set.
Syntax
Let’s check the basic syntax of the ORDER BY clause.
SELECT column-list FROM table_name
[WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
For example: Sorting by Single Column
PostgreSQL sorts in ascending order (ASC) when you use ORDER BY. The query below will sort the result order by the name column in ascending order.
SELECT name, address FROM employee ORDER BY name;
After executing the above query, we got the expected output, as shown in the below screenshot.

If you want the order to be descending, you can execute the query below.
SELECT name, address FROM employee ORDER BY name desc;
After executing the above query, I got the expected output, as shown in the screenshot below.

Example: Sorting by Multiple Columns
One of PostgreSQL’s powerful features is the ability to sort by multiple columns. This creates a hierarchical sorting structure where the second column only determines the order among rows that have identical values in the first sorting column.
We can execute the below query to achieve this.
SELECT name, address, country FROM employee ORDER BY name asc, address asc;
After executing the above query, I got the expected output, as shown in the below screenshot.

You can also mix ascending and descending sorts using the below query.
SELECT name, address, country FROM employee ORDER BY name asc, address desc;

Advanced ORDER BY Techniques
Now that we’ve covered the basics, let’s explore more advanced sorting approaches that can enhance your PostgreSQL queries.
NULLS FIRST and NULLS LAST
PostgreSQL gives you control over how NULL values are sorted with the NULLS FIRST and NULLS LAST options:
SELECT customer_name, last_purchase_date
FROM customers
ORDER BY last_purchase_date DESC NULLS LAST;
This places customers who have never made a purchase (NULL last_purchase_date) at the end of the results.
By default, when sorting in ascending order, NULLs appear last, and when sorting in descending order, NULLs appear first. These keywords let you override that behavior.
Check out Postgresql order by limit
Check out PostgreSQL Order By Date
Performance Prospective
While ORDER BY is powerful, it does come with performance implications that you should be aware of.
Indexing for Efficient Sorting
To optimize ORDER BY operations, consider creating indexes on columns you frequently sort by:
CREATE INDEX idx_employees_name ON employees(name);
With this index, queries that sort by hire_date will perform better, especially on large tables.
Avoiding ORDER BY in Subqueries
When writing complex queries, try to avoid using ORDER BY in subqueries unless necessary. PostgreSQL often disregards the ordering of subqueries, making the operation wasteful.
Read PostgreSQL WHERE with examples.
Best Practices for Using ORDER BY
Follow these best practices for better results.
- Be explicit with ASC/DESC – Even though ASC is the default, it clarifies your intentions.
- Use column names instead of positions – This improves code readability and prevents errors when columns are added or removed.
- Create indexes for frequently sorted columns – This dramatically improves performance on large tables.
- Consider NULLS FIRST/LAST for data with many NULL values – This gives you control over NULL positioning in your results.
Conclusion
The PostgreSQL ORDER BY clause is the best option for data presentation and analysis, from simple alphabetical listings to complex multi-tiered sorting with custom rules.
Remember that ORDER BY gives you robust control over how results are presented. By following the best practices mentioned in this article, you can create efficient, effective queries that give you the best results.
You may like the following PostgreSQL tutorials:
- PostgreSQL order by list of values
- PostgreSQL ORDER BY COUNT
- Postgresql Rank function
- Postgresql Concat
- Postgresql length of string
- Postgresql Format + 28 Examples
- PostgreSQL Delete Row
I am Bijay having more than 15 years of experience in the Software Industry. During this time, I have worked on MariaDB and used it in a lot of projects. Most of our readers are from the United States, Canada, United Kingdom, Australia, New Zealand, etc.
Want to learn MariaDB? Check out all the articles and tutorials that I wrote on MariaDB. Also, I am a Microsoft MVP.