Clique aqui para ler esse artigo em PDF.
Criando funções de agregação no PostgreSQL
Muito além de COUNT(), SUM() e AVG()
No desenvolvimento de sistemas, freqüentemente encontramos problemas de SQL que envolvem agregações de dados, seja para identificar campos únicos, ou mesmo acumulados dentro de uma tabela. Em um exemplo de um sistema de vendas, poderíamos precisar saber qual o dia em que mais vendas ocorreram em um mês. Isso é realizado através de agregações de dados.
Para implementar a solução, geralmente construímos stored procedures que, através de cursores, varrem os registros de interesse, calculam e retornam os valores desejados. Esta abordagem, apesar de ser funcional, muitas vezes não é a mais otimizada. Para auxiliar nesta questão, muitos SGBDs já oferecem o recurso de função de agregação customizada ou definida pelo usuário – UDA. Esta nova abordagem resulta em um desempenho muito superior ao da utilização de cursores, uma vez que as funções de agregação são previamente processadas pelo query processor do SGBD.
Além de ser uma poderosa ferramenta para a resolução de problemas em linguagem SQL, a UDA abre as portas para um interessante mundo de possibilidades no SGBD, resultando em simplificação do código SQL e otimização no atendimento às requisições.
Neste artigo será abordado como criar e utilizar funções de agregação definidas pelo usuário no PostgreSQL, além de outros tópicos relacionados à capacidade de extensão deste SGBD. Iniciando com a definição geral de funções de agregação e a descrição dos exemplos mais comuns - COUNT(), SUM(), AVG(), serão explicados a sintaxe, o funcionamento e a justificativa para utilização de uma função de agregação personalizada. Alguns exemplos práticos norteiam o estudo até o seu final, sendo utilizados interessantes recursos do SGBD que confirmam o fato de que o PostgreSQL é realmente extensível.
A próxima seção apresenta uma visão geral sobre as funções de agregação.
Funções de agregação
Tal como a maioria dos outros SGBDs relacionais, o PostgreSQL suporta funções de agregação. As funções de agregação retornam um único valor a partir de um conjunto de linhas de entrada. Por exemplo, existem funções de agregação para contar o número de registros, determinar o maior e o menor valor de um campo, calcular a soma e a média aritmética de um campo, entre outras. A Tabela 1 mostra as funções de agregação mais comuns em SGBDs relacionais e que no PostgreSQL vêm incorporadas ao sistema principal (core).
Tabela 1. Funções de agregação mais comuns em SGBDs relacionais.
Uma instrução SQL, para utilizar uma função de agregação, precisa obedecer a algumas considerações e utilizar uma sintaxe especial: a expressão de agregação.
Uma expressão de agregação representa a aplicação de uma função de agregação perante as linhas selecionadas de uma consulta (query). Uma função de agregação reduz múltiplas entradas em um único valor de saída, tal como o cálculo da soma ou média das entradas. A sintaxe de uma expressão de agregação pode ser de uma das formas descritas na ...