Análise de dados

Google Sheets QUERY: Funções de Agregação (2026)

Marc Sean18 de abril de 20268 min de leitura

No Google Sheets, as funções de agregação da função QUERY são sum(), avg(), count(), max() e min(). Essa é a lista completa. Sem funções de janela, sem countd(), sem mediana - apenas cinco. Se você espera algo próximo ao toolkit de agregação do SQL, vai bater numa parede rápido, mas essas cinco cobrem 80% do que modelos financeiros realmente precisam em sumarizações cruzadas.

A função QUERY segue a especificação da Google Visualization API Query Language (v0.7), que a própria documentação descreve como "um SQL restrito". Em abril de 2026, as funções de agregação disponíveis não foram expandidas desde o lançamento inicial - a lista é estável e curta.

Funções de Agregação do QUERY no Google Sheets: Referência Rápida

FunçãoSintaxeO que fazCaso de uso financeiro
sum()sum(Col)Total de coluna numéricaReceita por região, custo de headcount
avg()avg(Col)Média de coluna numéricaTicket médio, taxa blended
count()count(Col)Contagem de linhas não nulasVolume de transações, contagem de negócios
max()max(Col)Maior valor na colunaPico de gastos, maior conta de ARR
min()min(Col)Menor valor na colunaPreço mínimo, margem mínima

Todas as cinco exigem uma cláusula GROUP BY quando você está agrupando - o QUERY não infere isso automaticamente. Diferente do SQL, você não pode misturar colunas agregadas e não agregadas sem agrupar explicitamente as não agregadas.

SUM com GROUP BY: Receita por Departamento

Esse é o padrão mais usado. Uma aba de DRE puxando dados de um razão de transações:

=QUERY('Transações'!A:E,
  "SELECT C, sum(D)
   WHERE B >= date '"&TEXT(Premissas!$B$3,"yyyy-mm-dd")&"'
   AND B <= date '"&TEXT(Premissas!$C$3,"yyyy-mm-dd")&"'
   GROUP BY C
   LABEL sum(D) 'Receita'",1)

A coluna C é o departamento, a coluna D é o valor. O intervalo de datas é puxado de Premissas!$B$3:$C$3, então o período é controlado em um único lugar. Altere as datas na aba de Premissas e todas as fórmulas QUERY dependentes atualizam automaticamente.

Para uma apresentação ao conselho puxando R$ 4,2 milhões de receita no Q1 divididos em 6 centros de custo, esse padrão roda em menos de 2 segundos em um razão com 50.000 linhas - mais rápido do que uma tabela dinâmica que precisa ser atualizada manualmente.

AVG: Taxas Blended e Ticket Médio

=QUERY('Pipeline'!A:F,
  "SELECT D, avg(E), count(A)
   WHERE F = 'Fechado Ganho'
   AND C >= date '"&TEXT(TODAY()-90,"yyyy-mm-dd")&"'
   GROUP BY D
   LABEL avg(E) 'Ticket Médio', count(A) 'Qtd. Negócios'",1)

A coluna D é o representante comercial, E é o ACV, F é a etapa. Isso retorna o ticket médio (R$ 186 mil no nosso modelo) junto com a contagem de negócios por representante em uma única fórmula - sem colunas auxiliares.

Um ponto em que avg() não resolve: médias ponderadas. Se você precisa de uma taxa blended ponderada por receita, a expressão seria sum(receita * taxa) / sum(receita) - o que o QUERY não consegue calcular internamente. Para isso, use SUMPRODUCT.

COUNT: Volume de Transações Sem Duplicatas

=QUERY('Razão'!A:G,
  "SELECT E, count(A)
   WHERE D = 'OPEX'
   GROUP BY E
   ORDER BY count(A) DESC
   LABEL count(A) 'Volume de Transações'",1)

count() conta valores não nulos na coluna especificada. Se você precisa de contagens distintas - fornecedores únicos, contas únicas - o QUERY não resolve nativamente. O workaround padrão é envolver o resultado com COUNTUNIQUE, ou usar SUMPRODUCT com arrays de COUNTIF diretamente nos dados de origem.

Essa é provavelmente a maior limitação do conjunto de funções de agregação. Uma função countd() eliminaria metade das colunas auxiliares que poluem modelos financeiros.

MAX e MIN: Verificação de Limites

As duas são diretas, mas ficam especialmente úteis na análise de desvios orçamentários:

=QUERY('Realizados_Mensais'!A:D,
  "SELECT B, min(C), max(C), avg(C)
   WHERE A >= date '2025-01-01'
   GROUP BY B
   LABEL min(C) 'Mínimo', max(C) 'Máximo', avg(C) 'Média'",1)

Isso retorna o intervalo mensal para cada rubrica - útil para identificar um centro de custo que oscila de R$ 280 mil a R$ 410 mil mês a mês quando deveria ser estável. Combine max() com min() na mesma query e você obtém a amplitude sem escrever duas fórmulas separadas.

Como Combinar Funções de Agregação em Uma Query do Google Sheets

O QUERY permite empilhar várias funções de agregação em um único SELECT, e esse é o principal motivo para escolhê-lo no lugar de tabelas dinâmicas em contexto de modelagem:

=QUERY('Receita'!A:F,
  "SELECT B, C,
          sum(D)   as TotalReceita,
          avg(D)   as TicketMedio,
          count(A) as QtdNegocios,
          max(D)   as MaiorNegocio
   WHERE E = 'Enterprise'
   GROUP BY B, C
   ORDER BY sum(D) DESC",1)

A coluna B é o trimestre, C é a região, D é o ACV. Uma única fórmula retorna um breakdown regional completo: R$ 3,1 milhões no total, ticket médio de R$ 217 mil, 14 negócios, maior negócio de R$ 890 mil - agrupado por trimestre e região, ordenado por receita. Sem essa abordagem, seriam 4 tabelas dinâmicas separadas, todas exigindo atualização manual.

PIVOT: O Padrão Agregação + Crosstab

A cláusula PIVOT do QUERY aplica funções de agregação e transpõe valores únicos em colunas. Para um modelo de consórcio bancário em que você precisa de exposição por contraparte ao longo dos trimestres:

=QUERY('Exposição'!A:E,
  "SELECT B, sum(D)
   WHERE C = 'Desembolsado'
   GROUP BY B
   PIVOT A
   LABEL sum(D) ''",1)

A coluna A é o trimestre (Q1-Q4), B é a contraparte, D é o valor de exposição. O PIVOT transpõe os trimestres em colunas automaticamente. O porém: os cabeçalhos de coluna são dinâmicos, então qualquer fórmula que referencie colunas específicas vai quebrar se a estrutura do pivot mudar. Para relatórios estáticos que entram numa apresentação ao conselho, funciona bem. Para um modelo ativo com dependências downstream, prefira SOMASES estáticos.

O que o QUERY Não Consegue Fazer

Vale ser explícito sobre as lacunas, pois elas impactam diretamente as decisões de design do modelo:

Sem countd() (contagem distinta). Para contar valores únicos, use =SUMPRODUCT(1/COUNTIF(intervalo,intervalo)) ou uma coluna auxiliar.

Sem median(). Use =MED(SE(...)) como fórmula matricial.

Sem stdev() ou var(). Agregações estatísticas não estão na especificação. Extraia os dados com QUERY e aplique DESVPAD() por fora.

Sem funções de janela. Totais acumulados, ranking e lag/lead não existem. São necessárias colunas auxiliares ou SCAN/LAMBDA nas versões mais recentes do Sheets.

Sem agregação condicional. O padrão SUM(CASE WHEN...) do SQL não tem equivalente direto. Use SOMASES entre abas - =SOMASES('DRE'!D:D,'DRE'!C:C,"OPEX",'DRE'!B:B,">="&Premissas!$B$3).

Sobre LABEL e FORMAT

Ambas as cláusulas funcionam em colunas agregadas. LABEL sum(D) 'Receita' renomeia o cabeçalho do resultado - essencial quando o cabeçalho padrão sum D quebra referências downstream de VLOOKUP. FORMAT sum(D) '#.##0' aplica formatação numérica diretamente na saída da query, mas isso converte a coluna para texto, quebrando qualquer fórmula que faça cálculos sobre o resultado. Use FORMAT apenas para saídas exclusivamente visuais. Para qualquer dado que você vai calcular depois, pule o FORMAT e aplique a formatação de célula separadamente.

Conforme a documentação oficial do Google Sheets (abril de 2026): "A cláusula LABEL define o rótulo para uma ou mais colunas." A cláusula aceita uma string literal e deve vir após GROUP BY, PIVOT, ORDER BY e LIMIT na string de consulta.

Se você trabalha com grandes volumes de dados entre abas e quer algo mais próximo de um toolkit SQL completo - joins, funções de janela, countd() - a integração do DuckDB com o Google Sheets mostra como isso funciona na prática.

Perguntas Frequentes

Quais são as funções de agregação disponíveis no QUERY do Google Sheets? São exatamente cinco: sum(), avg(), count(), max() e min(). A lista é definida pela Google Visualization API Query Language v0.7 e não foi expandida desde o lançamento. Não existem funções como median(), stdev() ou countd() dentro do QUERY.

Como fazer contagem distinta (valores únicos) no QUERY do Google Sheets? O QUERY não oferece countd() nativamente. As alternativas são: (1) =SUMPRODUCT(1/COUNTIF(intervalo,intervalo)) aplicado fora do QUERY, (2) uma coluna auxiliar com COUNTIF marcando a primeira ocorrência de cada valor, ou (3) COUNTUNIQUE aplicado ao intervalo retornado pelo QUERY. Para grandes bases de dados, a coluna auxiliar tende a ser a opção mais performática.

O QUERY do Google Sheets suporta cálculo de mediana? Não. A função median() não existe na especificação da Google Visualization API Query Language. Para calcular a mediana de um subconjunto de dados, use a fórmula matricial =MED(SE(intervalo_critério=critério, intervalo_valores)) confirmada com Ctrl+Shift+Enter (ou Enter simples no Google Sheets moderno). Extraia primeiro o subconjunto com QUERY e aplique MED por fora, se necessário.

É possível usar funções de agregação no QUERY sem a cláusula GROUP BY? Sim - mas apenas quando o SELECT contém exclusivamente funções de agregação, sem nenhuma coluna não agregada. Por exemplo, "SELECT sum(D), avg(D)" funciona e retorna uma única linha com os totais da base inteira. Assim que você adicionar uma coluna não agregada ao SELECT (como "SELECT C, sum(D)"), o GROUP BY torna-se obrigatório.


Escolha um plano do ModelMonkey - funciona tanto no Google Sheets quanto no Excel.