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ção | Sintaxe | O que faz | Caso de uso financeiro |
|---|---|---|---|
sum() | sum(Col) | Total de coluna numérica | Receita por região, custo de headcount |
avg() | avg(Col) | Média de coluna numérica | Ticket médio, taxa blended |
count() | count(Col) | Contagem de linhas não nulas | Volume de transações, contagem de negócios |
max() | max(Col) | Maior valor na coluna | Pico de gastos, maior conta de ARR |
min() | min(Col) | Menor valor na coluna | Preç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.