Análisis de datos

Funciones de Agregación QUERY en Google Sheets: Lista

Marc Sean18 de abril de 20268 min de lectura

Las funciones de agregación de QUERY en Google Sheets son sum(), avg(), count(), max() y min(). Esa es la lista completa. Sin funciones de ventana, sin countd(), sin mediana - solo cinco. Si llegaste aquí esperando algo parecido al toolkit de agregación de SQL, vas a chocar rápido con el techo, pero estas cinco cubren el 80% de lo que los modelos financieros realmente necesitan para resumir datos cruzados.

La función sigue la especificación del Google Visualization API Query Language, que la propia documentación de Google describe como "un SQL restringido." A abril de 2026, las funciones de agregación disponibles no se han ampliado desde el lanzamiento inicial - la lista es estable y corta.

Las cinco funciones de agregación

FunciónSintaxisQué haceCaso de uso en finanzas
sum()sum(Col)Total de una columna numéricaIngresos por región, costo de nómina
avg()avg(Col)Promedio de una columna numéricaTamaño promedio de negocio, tasa blended
count()count(Col)Conteo de filas no nulasVolumen de transacciones, número de cierres
max()max(Col)Valor más alto de una columnaGasto pico, cuenta con mayor ARR
min()min(Col)Valor más bajo de una columnaPrecio mínimo, margen piso

Las cinco requieren una cláusula GROUP BY cuando agrupas - QUERY no la infiere. A diferencia de SQL, no puedes mezclar columnas agregadas y no agregadas sin agrupar explícitamente las segundas.

SUM con GROUP BY: ingresos por área

Este es el patrón más usado. Una pestaña de P&L que jala desde un libro de transacciones:

=QUERY('Transacciones'!A:E,
  "SELECT C, sum(D)
   WHERE B >= date '"&TEXT(Supuestos!$B$3,"yyyy-mm-dd")&"'
   AND B <= date '"&TEXT(Supuestos!$C$3,"yyyy-mm-dd")&"'
   GROUP BY C
   LABEL sum(D) 'Ingresos'",1)

La columna C es el área o centro de costos; la columna D es el monto. El rango de fechas viene de Supuestos!$B$3:$C$3, así que el período se controla en un solo lugar. Cambia las fechas en esa pestaña y todos los QUERY aguas abajo se actualizan solos.

Para un board pack que consolida $4,200,000 de ingresos del Q1 desglosados en 6 centros de costo, este patrón corre en menos de 2 segundos sobre un libro de 50,000 filas - más rápido que una tabla dinámica que hay que refrescar manualmente.

AVG: tasas blended y tamaño de negocio

=QUERY('Pipeline'!A:F,
  "SELECT D, avg(E), count(A)
   WHERE F = 'Closed Won'
   AND C >= date '"&TEXT(TODAY()-90,"yyyy-mm-dd")&"'
   GROUP BY D
   LABEL avg(E) 'Ticket Promedio', count(A) 'Cierres'",1)

La columna D es el ejecutivo de ventas, E es el ACV y F es la etapa. Esto te devuelve el ticket promedio ($186K en nuestro modelo) junto con el conteo de cierres por ejecutivo en la misma fórmula - sin columnas auxiliares.

Lo que avg() no resuelve: promedios ponderados. Si necesitas una tasa blended ponderada por ingresos, necesitas sum(ingreso * tasa) / sum(ingreso), y eso QUERY no puede expresarlo. Para ese cálculo tendrás que usar SUMPRODUCT.

COUNT: volumen de transacciones sin duplicados

=QUERY('LibroMayor'!A:G,
  "SELECT E, count(A)
   WHERE D = 'OPEX'
   GROUP BY E
   ORDER BY count(A) DESC
   LABEL count(A) 'N° Transacciones'",1)

count() cuenta los valores no nulos en la columna especificada. Si necesitas conteos distintos - proveedores únicos, cuentas únicas - QUERY no puede hacerlo de forma nativa. El workaround estándar es envolver el resultado con COUNTUNIQUE, o usar SUMPRODUCT con arreglos de COUNTIF directamente sobre los datos de origen.

Esta es, sin duda, la mayor limitación del conjunto de funciones de agregación. Una función countd() eliminaría la mitad de las columnas auxiliares que saturan los modelos financieros.

MAX y MIN: análisis de rangos y varianzas

Ambas son sencillas, pero se vuelven muy útiles en el análisis de varianzas:

=QUERY('Reales_Mensuales'!A:D,
  "SELECT B, min(C), max(C), avg(C)
   WHERE A >= date '2025-01-01'
   GROUP BY B
   LABEL min(C) 'Piso', max(C) 'Pico', avg(C) 'Promedio'",1)

Esto devuelve el rango mensual para cada línea del estado de resultados - muy útil para detectar un centro de costos que oscila entre $280K y $410K mes a mes cuando debería ser plano. Combinar max() con min() en la misma consulta te da el spread sin escribir dos fórmulas separadas.

Combinar múltiples agregaciones en una sola consulta

QUERY permite apilar varias funciones de agregación en un solo SELECT, y esa es la razón principal para elegirlo sobre tablas dinámicas en un modelo financiero:

=QUERY('Ingresos'!A:F,
  "SELECT B, C,
          sum(D)   as TotalIngresos,
          avg(D)   as TicketPromedio,
          count(A) as Cierres,
          max(D)   as MayorNegocio
   WHERE E = 'Enterprise'
   GROUP BY B, C
   ORDER BY sum(D) DESC",1)

La columna B es el trimestre, C es la región y D es el ACV. Una sola fórmula te entrega el desglose regional completo: $3,100,000 en total, $217K de ticket promedio, 14 cierres, $890K el mayor negocio - agrupado por trimestre y región, ordenado por ingresos. Esto equivaldría a 4 tablas dinámicas separadas, todas con refresco manual.

PIVOT: agregación con tabla cruzada

La cláusula PIVOT de QUERY aplica funciones de agregación y transpone los valores únicos en columnas. Para un modelo de seguimiento de exposición por contraparte a lo largo de trimestres:

=QUERY('Exposicion'!A:E,
  "SELECT B, sum(D)
   WHERE C = 'Vigente'
   GROUP BY B
   PIVOT A
   LABEL sum(D) ''",1)

La columna A es el trimestre (Q1-Q4), B es la contraparte y D es el monto de exposición. PIVOT transpone los trimestres a columnas automáticamente. El riesgo: los encabezados de columna son dinámicos, así que cualquier fórmula que referencie columnas específicas aguas abajo se romperá si cambia la estructura del pivot. Para reportes estáticos que van al board deck, funciona bien. Para un modelo vivo con dependencias aguas abajo, usa SUMIFS estáticas en su lugar.

Lo que QUERY no puede hacer

Vale la pena ser explícito sobre las limitaciones, porque afectan las decisiones de diseño del modelo:

Sin countd() (conteo distinto). Cuenta valores únicos con =SUMPRODUCT(1/COUNTIF(rango,rango)) o una columna auxiliar.

Sin median(). Usa =MEDIANA(SI(...)) como fórmula matricial.

Sin stdev() ni var(). Las agregaciones estadísticas no están en la especificación. Extrae los datos con QUERY y envuélvelos con DESVEST() o VAR() afuera.

Sin funciones de ventana. Totales acumulados, ranking y lag/lead no existen. Requieren columnas auxiliares o SCAN/LAMBDA en versiones recientes de Sheets.

Sin agregación condicional. El patrón SUM(CASE WHEN...) de SQL no tiene equivalente. Usa SUMAR.SI.CONJUNTO entre pestañas: =SUMAR.SI.CONJUNTO('PyG'!D:D,'PyG'!C:C,"OPEX",'PyG'!B:B,">="&Supuestos!$B$3).

Una nota sobre LABEL y FORMAT

Ambas cláusulas funcionan sobre columnas agregadas. LABEL sum(D) 'Ingresos' renombra el encabezado del resultado - fundamental cuando el encabezado por defecto sum D rompe las referencias de VLOOKUP aguas abajo. FORMAT sum(D) '$#,##0' aplica formato numérico dentro de la propia consulta, pero convierte la columna a texto, lo que rompe cualquier fórmula que haga cálculos sobre el resultado. Usa FORMAT solo para salidas de visualización. Para todo lo que vayas a calcular, omite FORMAT y aplica el formato de celda por separado.

A abril de 2026, la documentación de Google especifica: "La cláusula LABEL establece la etiqueta para una o más columnas." La cláusula acepta un literal de texto y debe ir después de GROUP BY, PIVOT, ORDER BY y LIMIT en la cadena de consulta.

Preguntas frecuentes

¿QUERY en Google Sheets tiene una función para contar valores únicos (como countd() en SQL)? No. La especificación del Google Visualization API Query Language no incluye countd(). Para contar valores distintos, usa =SUMPRODUCT(1/COUNTIF(rango,rango)) directamente sobre el rango de origen, o agrega una columna auxiliar con COUNTIF y filtra con QUERY sobre esa columna. Es el workaround más común en modelos financieros que necesitan contar proveedores únicos o cuentas sin duplicados.

¿Cómo calculo la mediana con QUERY en Google Sheets? No puedes - median() no existe en las funciones de agregación de QUERY. El camino es extraer los valores filtrados con QUERY en un rango auxiliar y luego calcular =MEDIANA(rango_auxiliar), o usar directamente =MEDIANA(SI(condición, rango)) como fórmula matricial (Ctrl+Shift+Enter en Sheets clásico, o con la sintaxis de arreglo nativa en la versión actual).

¿Se puede hacer un promedio ponderado con avg() en QUERY? No directamente. avg() calcula el promedio simple de los valores en la columna. Para una tasa blended ponderada por ingresos - por ejemplo, la tasa de descuento promedio ponderada por el ACV de cada negocio - necesitas =SUMPRODUCT(ingreso, tasa) / SUMPRODUCT(ingreso) fuera de QUERY, o estructurar la consulta para que devuelva sum(ingreso) y sum(ingreso * tasa) como columnas separadas y dividirlas con una fórmula externa.


Si estás procesando conjuntos de datos grandes entre pestañas y necesitas algo más cercano a un toolkit SQL completo - joins, funciones de ventana, countd() - la integración de DuckDB para Google Sheets cubre cómo se ve eso en la práctica.

Elige un plan de ModelMonkey - funciona en Google Sheets y en Excel.