Sorting and Ordering Results

1. Ordering by Single Field

await prisma.post.findMany({ orderBy: { createdAt: "desc" } });
DirectionValue
Ascending"asc"
Descending"desc"

2. Ordering by Multiple Fields

await prisma.post.findMany({
  orderBy: [{ published: "desc" }, { createdAt: "desc" }]
});
AspectDetail
PriorityArray order = SQL ORDER BY priority
Mixed directionEach entry independent

3. Using Ascending Order

UseDetail
DefaultIf orderBy omitted (DB-dependent)
Alphabetical names{ name: "asc" }

4. Using Descending Order

Common UseDetail
Recent firstcreatedAt: "desc"
Highest scorescore: "desc"
await prisma.post.findMany({ orderBy: { author: { name: "asc" } } });
AspectDetail
To-oneSort by joined column
To-manyOnly _count supported

6. Using Null Positioning

await prisma.user.findMany({
  orderBy: { lastLogin: { sort: "desc", nulls: "last" } }
});
OptionEffect
nulls: "first"Nulls before non-null
nulls: "last"Nulls after non-null
SupportPG, SQLite (with workaround on MySQL)

7. Combining Sort with Filters

PatternDetail
where + orderByApply filter, then sort
IndexMatch indexed columns for performance

8. Ordering by Aggregations

await prisma.user.findMany({
  orderBy: { posts: { _count: "desc" } },
  take: 10
});
AggregatorUse
_countBy related row count
_sum / _avgVia groupBy+orderBy

9. Using Case-Insensitive Sorting

DBApproach
PGUse LOWER(field) via raw query
MySQLUse ci collation
AppSort post-query for small sets

10. Implementing Relevance Sorting

await prisma.post.findMany({
  where: { title: { search: "react & typescript" } },
  orderBy: { _relevance: { fields: ["title"], search: "react", sort: "desc" } }
});
AspectDetail
PreviewfullTextSearchPostgres or MySQL fulltext
UseRank-based ordering for search