# Agregações (funções de conjunto)

Esta seção descreve as agregações (também descritas como funções de conjunto no ANSI SQL-92 e como funções de coluna em algumas literaturas sobre banco de dados). As agregações fornecem meios de avaliar uma expressão para um conjunto de linhas. Enquanto as outras funções nativas operam sobre uma única expressão, as funções de agregação operam sobre conjuntos de valores reduzindo-os a um único valor escalar. As agregações nativas podem calcular o valor mínimo, o valor máximo, a soma e a média de uma expressão com relação a um conjunto de valores, assim como contar linhas. Também podem ser criadas agregações do usuário para executar outras funções de conjunto, como calcular o desvio padrão.

As agregações nativas podem operar nos tipos de dado mostrados em Tipos de dado permitidos pelas agregações nativas.

Tabela 1. Tipos de dado permitidos pelas agregações nativas
| Todos os tipos | Tipos de dado numéricos nativos
--- | --- | ---
COUNT | X | X
MIN |  | X
MAX |  | X
AVG |  | X
SUM |  | X

As agregações são permitidas apenas:

- No ItemSeleção da ExpressãoSeleção.
- Na Cláusula HAVING.
- Na Cláusula ORDER BY (utilizando um nome aliás) se a agregação aparecer no resultado do bloco de consulta relevante. Ou seja, é permitido um aliás para uma agregação na Cláusula ORDER BY se, e somente se, a agregação aparecer no ItemSeleção da ExpressãoSeleção.

Todas as expressões nos ItensSelecionados da ExpressãoSeleção devem ser agregações ou colunas agrupadas (consulte a Cláusula GROUP BY) (O mesmo é verdade se houver uma cláusula HAVING sem uma cláusula GROUP BY). Isto se deve ao fato do ResultSet da ExpressãoSeleção dever ser um escalar (valor único) ou um vetor (vários valores), mas não a uma mistura dos dois (as agregações têm como resultado um valor escalar, e a referência a uma coluna pode ter como resultado um vetor). Por exemplo, a consulta a seguir mistura valor escalar e vetor e, portanto, não é válida:

    -- inválido
    SELECT MIN(TEMPO_VÔO), ID_VÔO
    FROM VÔOS

Não são permitidas agregações em referências externas (correlações). Isto significa que se a subconsulta contiver uma agregação, esta agregação não poderá avaliar uma expressão que inclua uma referência a uma coluna do bloco de consulta externo. Por exemplo, a seguinte consulta não é válida porque SUM opera sobre uma coluna da consulta externa:

    SELECT c1
    FROM t1
    GROUP BY c1
    HAVING c2 >
        (SELECT t2.x
        FROM t2
        WHERE t2.y = SUM(t1.c3))

O cursor declarado em um ResultSet que inclui uma agregação no bloco de consulta externo não é atualizável.

Esta seção inclui as seguintes agregações:

- AVG
- COUNT
- MAX
- MIN
- SUM

Tópico pai: Funções nativas