Postgres: Sort query results
The order_by argument
Results from your query can be sorted by using the
The argument can be used to sort nested objects too.
The sort order (ascending vs. descending) is set by specifying the
desc enum value for the column name in the
order_by input object,
By default, for ascending ordering
null values are returned at the end
of the results and for descending ordering
null values are returned at
the start of the results.
null values can be fetched first on
ascending ordering by specifying
asc_nulls_first and last on
descending ordering by specifying
desc_nulls_last enum value e.g.
order_by argument takes an array of objects to allow sorting by
You can also use nested objects' fields to sort the results. Only columns from object relationships and aggregates from array relationships can be used for sorting.
You can see the complete specification of the
order_by argument in the
The following are example queries for different sorting use cases:
Example: Fetch a list of authors sorted by their names in an ascending order:
Sorting nested objects
Example: Fetch a list of authors sorted by their names with a list of their articles that is sorted by their rating:
Sorting based on nested object's fields
Only columns from object relationships and aggregates from array relationships can be used for sorting.
For object relationships
For object relationships only columns can be used for sorting.
Example: Fetch a list of articles that are sorted by their author's ids in descending order:
For array relationships
For array relationships only aggregates can be used for sorting.
Example: Fetch a list of authors sorted in descending order of their article count:
Example: Fetch a list of authors sorted in increasing order of their highest article rating:
Sorting based on computed fields
Only scalar computed fields and aggregates of table computed fields can be used for sorting.
For scalar computed fields
Scalar computed fields can be used for sorting just like columns.
Example: Computed field
total_marks is defined on
which calculates the sum of marks obtained in each subject. Fetch a list
of students sorted by their total marks:
For table computed fields
Aggregates of table being returned by table computed fields can be used for sorting.
Example: Computed field
get_articles is defined to
returns list of articles. Fetch a list of authors sorted by their
Only computed fields whose associated SQL function with no input arguments other than table row and hasura session arguments are supported in order by.
Ordering by computed fields is supported from version
v2.0.2 and above
Sorting by multiple fields
Example: Fetch a list of articles that is sorted by their rating (descending) and then on their published date (ascending with nulls first):
Key order in input object for order_by is not preserved. This means you should only have a single key per object, or you may see unexpected behavior.