funções de agregação fazem exatamente o que o nome diz: agregam valores. Simplificando: as funções de agregação agrupam valores
de acordo com alguns campos e retornam um valor baseado no conjunto de valores dos campos agregados, como uma soma, ou
o menor valor entre o conjunto de valores.

Veja abaixo as principais funções de agregação e sua respectiva utilidade:

SUM() = Somatória do conjunto de valores do campo passado como parâmetro.

AVG() = Média normal do conjunto de valores do campo passado como
parâmetro.

COUNT() = Contador do tipo de valores do campo passado como parâmetro.

MAX() = Maior valor do conjunto de valores do campo passado como parâmetro.

MIN() = Menor valor do conjunto de valores do campo passado como parâmetro.

OBS: as funções SUM(), AVG() e COUNT() aceitam as palavras chaves ALL e DISTINCT, mas cuidado com seu uso pois pode gerar sérios problemas de performance na instrução.

Vamos ver alguns exemplos:

Vamos supor que gostaríamos de contar quantos registros existem na tabela CLIENTES. Utilizaríamos a função de agregação COUNT():

SELECT
COUNT(*) FROM CLIENTES

Perceba que no exemplo acima, todos os registros da tabela CLIENTES são agregados e somados, pois a função COUNT() soma um conjunto de registros agregados. Atenção: somente quando passado o * para a função COUNT(), a mesma age como um contador de registros da tabela.

No exemplo, somente colocamos a função de agregação COUNT() na lista de campos. Aqui temos um ponto importante: diferentemente de outras instruções SELECT, quando utilizamos funções de agregação, NÃO podemos simplesmente colocar mais campos na lista de campos junto com a função de agregação. Precisamos agrupar os campos que também participaram da lista de campos.

Vamos supor que, para o conteúdo do campo TIPO da tabela CLIENTES,tenhamos somente dois valores possíveis: VIP e NORMAL. O que queremos agora é uma instrução que nos diga quantos clientes tipo VIP possuímos na tabela e quantos clientes tipo NORMAL existem:

SELECT
TIPO , COUNT(TIPO)
FROM
CLIENTES
GROUP
BY TIPO

Para obter o resultado, tivemos que utilizar a cláusula GROUP BY para agruparmos a contagem (função COUNT()) por tipo. Aqui vai uma regra: sempre que utilizarmos um campo na lista de campos de uma instrução SQL com agregação, e este campo não for uma função agregada, OBRIGATORIAMENTE este campo deve pertencer à lista de campos da cláusula GROUP BY. Tomem cuidado também ao colocar a cláusula GROUP BY sem nenhuma função de agregação na lista de campos, pois o SQL Server irá efetuar um processamento desnecessário.

Outro detalhe: se na instrução SELECT que foi colocada um GROUP BY estiver utilizando a cláusula ORDER BY para ordenar os registros, a ordem dos campos da cláusula ORDER BY deve ser obrigatoriamente igual à ordem dos campos da cláusula GROUP BY.

Agora, vamos supor que eu só queira mostrar os tipos de cliente que somente possuam mais de dez ocorrências, sejam eles tipo NORMAL ou VIP. Neste caso, poderíamos utilizar a cláusula HAVING:

SELECT
TIPO , COUNT(TIPO)
FROM
CLIENTES
GROUP
BY TIPO
HAVING
COUNT(TIPO) > 10

Quando utilizada em conjunto com o GROUP BY, a cláusula HAVING possui a mesma funcionalidade que a cláusula WHERE. A diferença é que a cláusula HAVING pode ser utilizada somente em instruções SELECT e a cláusula WHERE pode ser utilizada em SELECT, UPDATE e DELETE. Mas nada nos impede de utilizar em uma mesma instrução SELECT a cláusula HAVING e a cláusula WHERE.

Mas, uma dúvida: e se na minha tabela CLIENTES, eu possuir dois registros iguais? Como é feita a agregação?

Bom,pensando nesta situação, as palavras chaves DISTINCT e ALL foram implementadas no SQL Server. O valor padrão para algumas funções de agregação é ALL, ou seja, duas ou mais linhas iguais são computadas como somente uma linha. Analogamente, temos DISTINCT que computa duas linhas iguais como duas linhas independentes.Estas palavras chaves devem ser especificadas dentro da função de agregação. Exemplo:

SELECT
TIPO , COUNT(DISTINCT TIPO)
FROM
CLIENTES
GROUP
BY TIPO


1 comentários:

 
Top