Análisis de datos

QUERY ORDER BY en Google Sheets: ordena sin romper links

ModelMonkey8 de junio de 20268 min de lectura

Estructura básica:

=QUERY('P&L'!A:F, "SELECT A, B, C, D ORDER BY D DESC", 1)

El tercer argumento (1) es la cantidad de filas de encabezado. Las letras de columna (A, B, D) hacen referencia a las columnas reales de la pestaña fuente, no a las posiciones dentro del rango.

Por qué ORDER BY supera al ordenamiento manual

Cuando usas Datos → Ordenar rango en una pestaña fuente, las filas se reordenan físicamente. Cualquier fórmula en otra pestaña que haga referencia a 'P&L'!C14 ahora apunta a la entidad equivocada. En un modelo de 8 pestañas (P&L, Balance General, Flujo de Caja, FCFF, Supuestos, Retornos, Sensibilidad, Output), un ordenamiento descuidado genera docenas de referencias rotas en cascada.

QUERY ORDER BY escribe un arreglo ordenado en un rango de visualización separado. La fuente permanece intacta. Puedes entregarle el pack al CFO para que ordene según su criterio sin preocuparte de que los datos originales se hayan desplazado.

Sintaxis: ascendente, descendente y múltiples columnas

El orden predeterminado es ascendente. En finanzas, casi siempre quieres descendente: el valor más alto primero.

=QUERY('Ingresos'!A:E, "SELECT A, B, E ORDER BY E DESC", 1)

El ordenamiento por múltiples columnas funciona exactamente como en SQL, encadenando claves:

=QUERY('Pipeline'!A:G,
  "SELECT A, B, C, D ORDER BY C DESC, D ASC", 1)

Ordena por ARR descendente y luego por fecha de cierre ascendente como criterio de desempate. Para un modelo de valoración con más de 40 oportunidades en pipeline de un fondo de capital privado, esto rankea por tamaño de deal y mantiene las oportunidades de igual tamaño en orden cronológico.

QUERY entre pestañas: el error con las referencias de columna

Para un rango contiguo de una sola pestaña, las letras de columna funcionan sin problema:

=QUERY('FCFF'!A:H, "SELECT A, B, G, H ORDER BY G DESC", 1)

Pero cuando construyes un arreglo literal a partir de columnas no contiguas o de múltiples pestañas, QUERY pierde el rastro de las letras de columna originales. Hay que cambiar a la notación posicional Col1, Col2:

// Esto falla
=QUERY({'P&L'!C:C, 'P&L'!F:F}, "SELECT C, F ORDER BY F DESC", 1)

// Esto funciona
=QUERY({'P&L'!C:C, 'P&L'!F:F}, "SELECT Col1, Col2 ORDER BY Col2 DESC", 1)

A partir de junio de 2026, esta distinción está documentada en la referencia del Visualization API Query Language de Google, aunque está enterrada en la documentación. Según ese documento: "Las columnas se referencian por su ID de columna, que en un QUERY de Sheets es la letra de columna de la hoja para rangos directos, pero se convierte en un identificador posicional para arreglos literales."

La documentación oficial de la función QUERY de Google Sheets también confirma que la sintaxis de la cadena de consulta sigue el estándar del Visualization API Query Language, por lo que cualquier comportamiento que no encuentres documentado en la ayuda de Sheets está cubierto en la referencia de la API.

La mayoría de los analistas comete el error de notación al menos una vez cuando construye una vista resumen de múltiples fuentes.

Para apilar filas de múltiples pestañas (el patrón de consolidación trimestral):

=QUERY({'Ene'!A:E; 'Feb'!A:E; 'Mar'!A:E},
  "SELECT Col1, Col2, Col5 ORDER BY Col5 DESC", 1)

Los punto y coma apilan filas. Las comas apilan columnas.

WHERE + ORDER BY juntos

Casi siempre vas a necesitar ambos. Filtra primero y ordena el resultado filtrado:

=QUERY('Datos SKU'!A:F,
  "SELECT A, B, D, F WHERE F > 0.35 ORDER BY F DESC",
  1)

Esto trae los SKUs donde el margen de contribución (columna F) supera el 35% y los rankea de forma descendente. Para una diapositiva de margen de contribución por SKU en una presentación para el directorio, esa es toda la fórmula: sin columnas auxiliares, sin paso de filtro manual.

Con un umbral de fecha dinámico desde una pestaña de Supuestos:

=QUERY('Transacciones'!A:E,
  "SELECT A, B, C, E WHERE B >= date '"&TEXT(Supuestos!$B$3,"yyyy-mm-dd")&"' ORDER BY E DESC",
  1)

El wrapper TEXT() convierte la celda de supuesto al formato yyyy-mm-dd que espera QUERY. Sin él, la comparación de fechas pasa todas las filas o ninguna en silencio, dependiendo del tipo de dato. Sin error, solo datos incorrectos: el peor tipo de bug en un modelo financiero.

Ordenar por una columna que no muestras

QUERY ORDER BY te permite ordenar por una columna sin incluirla en el output. SORT() no puede hacer esto de forma limpia.

=QUERY('Headcount'!A:G,
  "SELECT A, B, C ORDER BY G DESC",
  1)

El output muestra nombre, área y banda salarial (columnas A-C). Las filas se ordenan por fecha de ingreso (columna G) sin que G aparezca. Para una vista de headcount destinada al directorio donde quieres rankear primero a los empleados más recientes sin que las fechas saturen la diapositiva, este es el patrón correcto.

Sensibilidad de runway: un ejemplo real

Para un análisis de sensibilidad de contrataciones, quieres las posiciones planeadas rankeadas por costo mensual en efectivo. Si el runway cae por debajo de 18 meses, el CFO puede leer la lista de recortes de arriba hacia abajo:

=QUERY('Headcount'!A:J,
  "SELECT A, C, D, J WHERE D = 'Planeado' ORDER BY J DESC",
  1)

La columna J es el costo mensual totalmente cargado. En una empresa con $4.2M de ARR quemando $380,000 al mes, saber que tres contrataciones de ingeniería planeadas representan $52,000 al mes de burn incremental, y verlas rankeadas, es exactamente el análisis que genera decisiones. El output ordenado desde una pestaña de headcount en vivo significa que el CFO siempre ve datos actuales, no una foto desactualizada.

QUERY ORDER BY vs. SORT()

QUERY ORDER BYSORT()
Filtrar mientras ordenasSí (WHERE)Requiere wrapper FILTER
Ordenamiento por múltiples columnasSíSí
Selección de columnasSí (SELECT)No
Manejo de encabezadosTercer argumentoExclusión manual
Fuente de arreglo literalSintaxis Col1, Col2Más limpio
AgregaciónSí (GROUP BY, SUM)No

Para "ordena este rango contiguo por la columna 3", SORT() es más corto. Para cualquier operación que combine filtro, selección y ordenamiento en un solo paso, que es la mayor parte del trabajo con presentaciones para el directorio, QUERY lo resuelve en una sola fórmula.

Cómo depurar los errores más comunes

Ordenamiento silencioso incorrecto: La columna tiene números almacenados como texto. QUERY ordena texto de forma lexicográfica, así que "100" aparece antes de "20". Envuelve la columna fuente con VALUE() o revisa la alineación: los números reales se alinean a la derecha, los números con formato de texto se alinean a la izquierda.

#VALUE! en rango entre pestañas: Usaste letras de columna dentro de un arreglo literal {}. Cámbialas a Col1, Col2.

Filtro de fecha que devuelve todas las filas o ninguna: Envuelve la referencia de la celda de fecha con TEXT(celda, "yyyy-mm-dd") como se muestra arriba.

Ordenamiento ignorado por completo: Tienes ORDER BY después de un GROUP BY o PIVOT. Estas cláusulas entran en conflicto en ciertas configuraciones. Agrupa primero y luego envuelve el output agrupado en un segundo QUERY para ordenar.

Si estás construyendo estas vistas ordenadas como parte de un modelo más grande y quieres que la sintaxis de QUERY se genere a partir de una descripción simple de la lógica de ordenamiento, como "muéstrame los SKUs con margen mayor al 35% ordenados por ingresos", ModelMonkey escribe y actualiza la fórmula desde el panel lateral.

Preguntas frecuentes

¿Qué diferencia hay entre QUERY ORDER BY y SORT() para ordenar en Google Sheets? SORT() es más conciso para ordenar un rango contiguo por una o varias columnas. QUERY ORDER BY es superior cuando necesitas combinar filtro (WHERE), selección de columnas (SELECT) y ordenamiento en una sola fórmula, que es el caso habitual en dashboards financieros y reportes para el directorio.

¿Por qué QUERY ORDER BY no ordena correctamente mis números? El motivo más frecuente es que los valores de la columna están almacenados como texto. QUERY aplica orden lexicográfico al texto, así que "9" aparece después de "100". Verifica la alineación de la celda: número real se alinea a la derecha, número-texto se alinea a la izquierda. Corrige con VALUE() en la fuente o con un SELECT Col1*1 en la propia fórmula QUERY.

¿Se puede usar ORDER BY con columnas de múltiples pestañas en Google Sheets? Sí, pero debes cambiar la notación. Con arreglos literales construidos con {}, las letras de columna dejan de funcionar. Usa Col1, Col2, Col3 en orden de aparición dentro del arreglo. Los punto y coma apilan filas (consolidación trimestral), las comas apilan columnas.

¿Cómo combino WHERE y ORDER BY en la misma fórmula QUERY? El orden de cláusulas en la cadena SQL es fijo: SELECT ... WHERE ... ORDER BY .... Siempre filtra antes de ordenar. Si inviertes el orden de las cláusulas, QUERY devuelve un error de sintaxis.

¿Puedo ordenar por una columna sin que aparezca en el resultado final? Sí, es una de las ventajas de QUERY frente a SORT(). Incluye la columna en ORDER BY pero omítela en SELECT. El output no la mostrará, pero las filas quedarán ordenadas según sus valores.