Funções Agregadas
Além da sintaxe básica do SELECT, alguns elementos a mais podem ser incluídos, as cláusulas GROUP BY e HAVING:
Sintaxe
SELECT lista_de_colunas
FROM lista_de_tabelas
WHERE condições
GROUP BY lista_de_expressões
HAVING condições Order by
Como já vimos, o WHERE (se presente) separa as linhas que satisfazem as condições iniciais. A cláusula GROUP BY organiza as linhas de resultado em grupos de acordo com os valores das expressões informadas. A cláusula HAVING (opcional) seleciona os grupos de acordo com os resultados. O resultado do SELECT...GROUP BY... tem uma linha para cada grupo, que pode conter valores de resumo (somatório, média, contagem etc.) calculados dentro do grupo.
Quando o GROUP BY está presente, é possível usar funções agregadas, que calculam valores baseado nas linhas de um grupo e geram valores de resumo.
Exemplo
Para saber quantas linhas existem na tabela 'funcionario' do banco de dados Exemplo, pode-se usar a função agregada COUNT(*): select count(*) from funcionario
O resultado será 8. Quando a cláusula GROUP BY é omitida, como nesse exemplo, todas as linhas da tabela são agrupadas para formar uma linha de resultado. Você pode também acrescentar uma condição: select count(*) from funcionario where ramal is not null
Neste caso o resultado é 3. Estamos contando quantos funcionarios tem a coluna Ramal diferente de null. Quando se utiliza o GROUP BY com o nome de uma coluna, os resultados são agregados por essa coluna. Por exemplo, para saber quantos funcionarios existem por departamento: select count(*) 'Quantidade Funcionário', CodDepartamento from funcionario group by CodDepartamento
O resultado será:
Ou seja, todos os três funcionários cujo código do departamento é 1 foram agrupados para gerar uma só linha de resultado. Depois todos os funcionários com coddepartamento = 3 (caso houvesse algum funcionário cadastrado com código departamento = 2, viria logo após o de código departamento