kysely
    Preparing search index...

    Interface OrderByInterface<DB, TB, O>

    interface OrderByInterface<DB, TB extends keyof DB, O> {
        clearOrderBy(): OrderByInterface<DB, TB, O>;
        orderBy<
            OE extends
                | string
                | Expression<any>
                | DynamicReferenceBuilder<any>
                | SelectQueryBuilderExpression<Record<string, any>>
                | OperandExpressionFactory<DB, TB, any>,
        >(
            expr: OE,
            modifiers?: OrderByModifiers,
        ): OrderByInterface<DB, TB, O>;
        orderBy<
            OE extends
                | string
                | Expression<any>
                | DynamicReferenceBuilder<any>
                | SelectQueryBuilderExpression<Record<string, any>>
                | OperandExpressionFactory<DB, TB, any>,
        >(
            exprs: readonly OE[],
        ): OrderByInterface<DB, TB, O>;
        orderBy<
            OE extends
                | `${string} desc`
                | `${string} asc`
                | `${string}.${string} desc`
                | `${string}.${string} asc`,
        >(
            expr: OE,
        ): OrderByInterface<DB, TB, O>;
        orderBy<
            OE extends
                | string
                | Expression<any>
                | DynamicReferenceBuilder<any>
                | SelectQueryBuilderExpression<Record<string, any>>
                | OperandExpressionFactory<DB, TB, any>,
        >(
            expr: OE,
            modifiers: Expression<any>,
        ): OrderByInterface<DB, TB, O>;
    }

    Type Parameters

    • DB
    • TB extends keyof DB
    • O

    Hierarchy (View Summary)

    Implemented by

    Index

    Methods

    • Adds an order by clause to the query.

      orderBy calls are additive. Meaning, additional orderBy calls append to the existing order by clause.

      orderBy is supported in select queries on all dialects. In MySQL, you can also use orderBy in update and delete queries.

      In a single call you can add a single column/expression or multiple columns/expressions.

      Single column/expression calls can have 1-2 arguments. The first argument is the expression to order by, while the second optional argument is the direction (asc or desc), a callback that accepts and returns an OrderByItemBuilder or an expression.

      See clearOrderBy to remove the order by clause from a query.

      Single column/expression per call:

      await db
      .selectFrom('person')
      .select('person.first_name as fn')
      .orderBy('id')
      .orderBy('fn', 'desc')
      .execute()

      The generated SQL (PostgreSQL):

      select "person"."first_name" as "fn"
      from "person"
      order by "id", "fn" desc

      Building advanced modifiers:

      await db
      .selectFrom('person')
      .select('person.first_name as fn')
      .orderBy('id', (ob) => ob.desc().nullsFirst())
      .execute()

      The generated SQL (PostgreSQL):

      select "person"."first_name" as "fn"
      from "person"
      order by "id" desc nulls first

      The order by expression can also be a raw sql expression or a subquery in addition to column references:

      importsql } from 'kysely'

      await db
      .selectFrom('person')
      .selectAll()
      .orderBy((eb) => eb.selectFrom('pet')
      .select('pet.name')
      .whereRef('pet.owner_id', '=', 'person.id')
      .limit(1)
      )
      .orderBy(
      sql<string>`concat(first_name, last_name) asc`
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      order by
      ( select "pet"."name"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      limit $1
      ) asc,
      concat(first_name, last_name) asc

      dynamic.ref can be used to refer to columns not known at compile time:

      async function someQuery(orderBy: string) {
      const { ref } = db.dynamic

      return await db
      .selectFrom('person')
      .select('person.first_name as fn')
      .orderBy(ref(orderBy))
      .execute()
      }

      someQuery('fn')

      The generated SQL (PostgreSQL):

      select "person"."first_name" as "fn"
      from "person"
      order by "fn"

      Type Parameters

      • OE extends
            | string
            | Expression<any>
            | DynamicReferenceBuilder<any>
            | SelectQueryBuilderExpression<Record<string, any>>
            | OperandExpressionFactory<DB, TB, any>

      Parameters

      Returns OrderByInterface<DB, TB, O>

    • Type Parameters

      • OE extends
            | string
            | Expression<any>
            | DynamicReferenceBuilder<any>
            | SelectQueryBuilderExpression<Record<string, any>>
            | OperandExpressionFactory<DB, TB, any>

      Parameters

      • exprs: readonly OE[]

      Returns OrderByInterface<DB, TB, O>

      It does ~2-2.6x more compile-time instantiations compared to multiple chained orderBy(expr, modifiers?) calls (in order by clauses with reasonable item counts), and has broken autocompletion.

    • Type Parameters

      • OE extends
            | `${string} desc`
            | `${string} asc`
            | `${string}.${string} desc`
            | `${string}.${string} asc`

      Parameters

      Returns OrderByInterface<DB, TB, O>

      It does ~2.9x more compile-time instantiations compared to a orderBy(expr, direction) call.

    • Type Parameters

      • OE extends
            | string
            | Expression<any>
            | DynamicReferenceBuilder<any>
            | SelectQueryBuilderExpression<Record<string, any>>
            | OperandExpressionFactory<DB, TB, any>

      Parameters

      Returns OrderByInterface<DB, TB, O>

      Use orderBy(expr, (ob) => ...) instead.