QUERY permite sacar el promedio de cada grupo de una tabla con una sola fórmula, escrita en un lenguaje parecido a SQL: =QUERY(A1:C,"select B, avg(C) where B <> '' group by B",1) devuelve una tabla con cada valor de la columna B y el promedio de C para ese valor. Es una función exclusiva de Google Sheets y su nombre no se traduce. Si conoces SQL, la sintaxis te resultará familiar; si no, basta con aprender cuatro palabras: select, where, group by y label.
Sintaxis
=QUERY(datos, consulta, [encabezados])
| Parte | Qué es | Ejemplo |
|---|---|---|
datos | El rango, encabezados incluidos | A1:C |
consulta | Texto entre comillas con la consulta | "select B, avg(C) group by B" |
encabezados | Cuántas filas de encabezado tiene datos | 1 |
| Cláusula | Para qué | Ejemplo |
|---|---|---|
avg(C) | Promedio de la columna C | select avg(C) |
group by B | Un promedio por cada valor de B | select B, avg(C) group by B |
where | Filtrar filas antes de promediar | where C > 0 and B <> '' |
order by | Ordenar el resultado | order by avg(C) desc |
label | Cambiar el encabezado «avg Importe» | label avg(C) 'Promedio' |
format | Decimales del resultado | format avg(C) '0.00' |
Dentro de la consulta, las columnas se nombran por su letra (A, B, C) y los textos van entre comillas simples: where B = 'Centro'.
Paso a paso
- Comprueba que cada columna tenga un solo tipo de dato: números en la de importes, fechas en la de fechas. QUERY decide el tipo por la mayoría y trata como vacíos los valores del tipo minoritario.
- Deja espacio libre a la derecha y debajo de la celda de la fórmula: el resultado se desborda.
- Escribe
=QUERY(A1:C,"select B, avg(C) where B <> '' group by B",1). - Agrega
order byylabelal final de la consulta, en ese orden:group by, luegoorder by, luegolabel, luegoformat. - Si la consulta tiene un error, Sheets muestra #VALUE! con un mensaje; pasa el cursor por encima para leer qué cláusula falló.
Ejemplos resueltos
Datos de ventas (A1:C8): Fecha, Sucursal, Importe.
| Fecha | Sucursal | Importe |
|---|---|---|
| 5/1/2026 | Centro | 820 |
| 12/1/2026 | Satélite | 640 |
| 20/1/2026 | Centro | 910 |
| 2/2/2026 | Polanco | 1,150 |
| 9/2/2026 | Satélite | 700 |
| 16/2/2026 | Polanco | 1,050 |
| 23/2/2026 | Centro | 760 |
Ejemplo 1: promedio por sucursal, ordenado
=QUERY(A1:C,"select B, avg(C) where B <> '' group by B order by avg(C) desc label avg(C) 'Promedio'",1)
Resultado:
| Sucursal | Promedio |
|---|---|
| Polanco | 1100 |
| Centro | 830 |
| Satélite | 670 |
Polanco promedia (1,150 + 1,050) / 2; Centro, (820 + 910 + 760) / 3; Satélite, (640 + 700) / 2. El where B <> '' evita una fila vacía en el resultado por las filas en blanco del rango abierto (en columnas de texto, las celdas vacías se comparan con ''; en columnas de números o fechas se usa is not null, como en el ejemplo 2). Al agregar ventas debajo, la tabla se recalcula sola.
Ejemplo 2: promedio por mes
=QUERY(A1:C,"select month(A)+1, avg(C) where A is not null group by month(A)+1 label month(A)+1 'Mes', avg(C) 'Promedio'",1)
Resultado: mes 1 con 790 ((820 + 640 + 910) / 3) y mes 2 con 915 ((1,150 + 700 + 1,050 + 760) / 4). El +1 es necesario porque month() numera enero como 0. Si tus datos abarcan varios años, agrupa también por year(A): group by year(A), month(A)+1.
Ejemplo 3: promedio y conteo, sin ceros
Si hubiera ventas registradas con 0 (devoluciones anotadas como cero, por ejemplo), puedes excluirlas y mostrar cuántas ventas respaldan cada promedio:
=QUERY(A1:C,"select B, avg(C), count(C) where C > 0 group by B label avg(C) 'Promedio', count(C) 'Ventas'",1)
Con los datos de la tabla, la columna Ventas muestra 3 para Centro y 2 para Polanco y Satélite. Ver el conteo junto al promedio es la mejor defensa contra conclusiones basadas en uno o dos datos.
Errores comunes
- Columnas con tipos mezclados. Si en la columna de importes hay textos como «n/d», QUERY puede tratar la columna como texto y avg() falla, o ignorar los números minoritarios. Limpia la columna o usa FILTER.
- Comillas dobles dentro de la consulta. Los textos van con comilla simple:
where B = 'Centro'. Si el texto viene de una celda, concaténalo:"… where B = '"&F1&"' …". - Orden de cláusulas.
labelantes degroup byda error. El orden es select, where, group by, pivot, order by, limit, label, format. - Encabezado mal indicado. Si omites el tercer argumento, Sheets lo estima; con datos raros puede tomar la primera fila de datos como encabezado. Escribe
1. - Esperar que la tabla de resultados sea editable. Es un resultado de fórmula: si escribes encima, aparece #REF!.
QUERY hace en una fórmula lo que una tabla dinámica de Sheets hace con el ratón. Si ya usas bases de datos, la misma lógica está explicada en promedio en SQL. Para promediar datos de otro archivo con QUERY, mira promedio de otro archivo con IMPORTRANGE.
Preguntas frecuentes
¿Por qué QUERY me da los meses del 0 al 11?
Porque la función month() del lenguaje de consultas numera enero como 0. Escribe month(A)+1 para obtener 1 a 12.
Fuentes
- Ayuda de Editores de Documentos de Google, «QUERY». Sintaxis QUERY(datos, consulta, [encabezados]) y ejemplos con avg y group by. Consultado el 11 de noviembre de 2026.