Skip to main content

ORDER BY

Learning Focus

Use this lesson to master ORDER BY for sorting results in DuckDB queries.

Concept Overview​

ORDER BY sorts the result set by one or more columns. By default, ordering is ascending (ASC).

DuckDB also supports NULLS FIRST / NULLS LAST and ordering by expressions.

Basic Syntax​

SELECT columns
FROM table
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];

Examples​

Example 1: Sort by Salary (Descending)​

SELECT name, salary FROM employees ORDER BY salary DESC;

Example 2: Multi-Column Sort​

SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;

Example 3: Sort by Expression​

SELECT name, salary,
salary / 12 AS monthly
FROM employees
ORDER BY monthly DESC;

Example 4: NULL Handling​

-- NULLs last (default in DuckDB for ASC)
SELECT name, hire_date FROM employees ORDER BY hire_date ASC NULLS LAST;

-- NULLs first
SELECT name, hire_date FROM employees ORDER BY hire_date ASC NULLS FIRST;

Example 5: Positional Ordering​

-- Order by the 3rd column in SELECT list
SELECT name, department, salary FROM employees ORDER BY 3 DESC;

Best Practices​

  • Always pair ORDER BY with LIMIT for pagination
  • Avoid ORDER BY in subqueries when not needed (adds overhead)
  • Use column names rather than positions for clarity

Common Pitfalls​

PitfallConsequencePrevention
Omitting ASC/DESCDefault ASC applied silentlyBe explicit for documentation clarity
Ordering a subquery unnecessarilyWasted computationOnly ORDER BY in the outermost query
NULL sorting surprisesNULLs appear at unexpected positionsAlways add NULLS FIRST or NULLS LAST

Quick Reference​

ORDER BY col ASC
ORDER BY col DESC
ORDER BY col1 ASC, col2 DESC
ORDER BY col NULLS FIRST
ORDER BY col NULLS LAST
ORDER BY 2 DESC -- positional

What's Next​