Saltar al contenido principal

Clásula order by

La cláusula order by se utiliza para ordenar los resultados de una consulta en función de ciertos criterios especificados en la consulta. Ordena el resultado generado por for y let después de que han sido filtradas por la cláusula where.

La sintaxis básica de la cláusula order by es la siguiente:

for $variable in //elemento
where condition
order by criteria1, criteria2, ... criteriaN descending
return result

donde:

  • $variable representa el elemento que se va a buscar.
  • condition es la expresión booleana que se evalúa para determinar si se incluye o no un elemento en el resultado.
  • Los criterios son los campos por los cuales se desea ordenar los resultados. Por defecto, el orden es ascendiente, pero se puede añadir el modificador descending para ordenar por orden descendiente.
  • result es la información que se desea recuperar.

Consideremos la siguiente consulta:

for $libro in //libro
order by $libro/autor, $libro/título
return $libro/título

En este ejemplo, se utiliza:

  • La cláusula order by para ordenar los libros por autor y luego por título. La cláusula order by especifica que se deben ordenar los libros primero por autor y luego por título.
  • La cláusula return se utiliza para recuperar el título de cada libro en el orden especificado.

Consideremos, ahora, la siguiente consulta:

for $estudiante in //estudiante
let $promedio := avg($estudiante/calificaciones/calificacion)
order by $promedio descending
return $estudiante/nombre

En este ejemplo, se utiliza:

  • La cláusula let para calcular el promedio de calificaciones de cada estudiante antes de ordenarlos.
  • La cláusula order by para ordenar los estudiantes por su promedio de calificaciones de mayor a menor. La cláusula order by especifica que se debe ordenar los estudiantes por su promedio de calificaciones, utilizando el operador descending para indicar que se deben ordenar de mayor a menor.
  • La cláusula return se utiliza para recuperar el nombre de cada estudiante en el orden especificado.