La función QUERY de Google Sheets, explicada
=QUERY(data; query; [headers]) filtra, ordena y resume un rango con un texto breve escrito en el lenguaje de consulta de la API de visualización de Google. Se parece a una consulta SQL, así que es lo más parecido a una tabla dinámica en una sola fórmula.
QUERY existe solo en Google Sheets. En Excel, usa FILTRAR (Inglés: FILTER), ORDENAR (Inglés: SORT), SUMAR.SI.CONJUNTO (Inglés: SUMIFS) o una tabla dinámica para las mismas tareas.
Los tres argumentos
data es el rango que se consulta. Cada columna debe contener un solo tipo de valor: números, texto o fechas. Una columna que mezcla tipos se trata según su tipo mayoritario.
query es el texto de la consulta entre comillas, o una referencia a una celda que lo contiene.
headers indica cuántas filas de encabezado tiene el rango. Si lo omites, Sheets lo adivina, y por eso a veces una fila de encabezado se trata como datos. Ponlo en 1 cuando tengas una fila de encabezado.
Select y where
Las columnas se nombran con sus letras dentro del rango (A, B, C…). =QUERY(A1:D20;"select A, C where C > 100";1) devuelve las columnas A y C de las filas en las que C es mayor que 100. Los valores de texto van entre comillas simples: =QUERY(A1:D20;"select A, C where B = 'East'";1).
Group by y sumas
Las funciones de agregación son sum, avg, count, min y max. =QUERY(A1:D20;"select B, sum(C) group by B";1) suma la columna C para cada valor distinto de B: un SUMIF para cada región en una sola fórmula. Cualquier columna seleccionada que no esté agregada debe aparecer en group by.
Order by, limit y label
=QUERY(A1:D20;"select B, sum(C) group by B order by sum(C) desc limit 3 label sum(C) 'Total'";1) ordena los totales de mayor a menor, conserva los tres primeros y cambia el nombre de la columna de suma a Total.
Pivot
Añade pivot para convertir los valores distintos de una columna en columnas: =QUERY(A1:D20;"select B, sum(C) group by B pivot D";1) muestra una columna para cada valor de D, como una tabla dinámica.
Errores comunes
Datos de tipos mezclados en una columna. Una columna con números y texto devuelve celdas vacías para el tipo minoritario.
Corrección: Limpia la columna para que cada celda tenga el mismo tipo antes de consultarla.
Olvidar las comillas en los valores de texto.
=QUERY(A1:D20;"select A where B = East")da un error.Corrección: Pon el texto entre comillas simples dentro de la consulta: B = 'East'.
Dejar fuera el argumento headers. Sheets lo adivina y puede tratar la fila de encabezado como datos.
Corrección: Indica siempre el número de filas de encabezado, normalmente 1.
Preguntas frecuentes
¿Cuál es el equivalente en Excel de QUERY?
No hay uno único. FILTRAR (Inglés: FILTER) con ORDENAR (Inglés: SORT) cubre select y where, SUMAR.SI.CONJUNTO (Inglés: SUMIFS) cubre las sumas de group by, y una tabla dinámica cubre pivot.
¿Necesito saber SQL?
No, pero ayuda: select, where, group by y order by funcionan de forma muy parecida a sus homólogos en SQL. La sección de SQL de este sitio los enseña.
Funciones relacionadas
- FILTERFILTER devuelve las filas de un rango que cumplen una condición, y las vuelca en las celdas inferiores.
- SORTSORT devuelve una copia ordenada de un rango que se actualiza al cambiar los datos, ascendente o descendente, por cualquier columna.
- SUMIFSSUMIFS suma los valores que cumplen varias condiciones a la vez, como los pedidos pagados de una región.
- UNIQUEUNIQUE devuelve cada valor de una lista una sola vez, eliminando duplicados con una fórmula que se actualiza sola.