1 BANCO DE DADOS GERENCIAL AULA 9 FUNÇÕES AGREGADAS E CÁLCULOS Funções Agregadas São funções aquelas que tomam uma coleção (um conjunto ou subconjunto) de valores como entrada, retornando um único valor. O número de funções agregadas na linguagem SQL é vasta. Por isso, veremos alguns exemplos e abaixo, estamos passando um link para que acessem mais funções. Importante: dependendo do SGBD, poderá haver diferentes funções que executem a mesma coisa entre eles, e até mesmo a sintaxe de funções similares poderão ser diferentes. Por isso, é importante que consultem o manual ou o tutorial do SGBD que resolverem utilizar. Para ver mais funções, veja nos links: Manual PostgreSQL Funções matemáticas: http://pgdocptbr.sourceforge.net/pg80/functions-math.html Funções caracteres: http://pgdocptbr.sourceforge.net/pg80/functions-string.html Manual Mysql http://dev.mysql.com/doc/refman/4.1/pt/functions.html 2 BANCO DE DADOS GERENCIAL Para auxiliar nos exemplos abaixo, vamos criar uma tabela. VENDEDOR NOME DO CAMPO TIPO DO CAMPO TAMANHO Regras Codigo integer Nome Varchar 40 NOT NULL Float 8,2 NOT NULL Comissao PK Inserir alguns registros Funções do SQL Os exemplos de funções abaixo apresentados fazem parte da linguagem SQL. Funções são comandos prontos para executar determinada tarefa. COUNT() Contagem do número de registros agregados de uma determinada tabela ou junção entre tabelas. Exemplo: SELECT count(*) FROM vendedor SUM() Somatória do conjunto de valores do campo passado como parâmetro. Exemplo: 3 BANCO DE DADOS GERENCIAL SELECT sum(comissao) FROM vendedor MIN() Retorna o menor valor do conjunto de valores do campo passado como parâmetro. Exemplo: SELECT min(comissao) FROM vendedor MAX() Retorna o maior valor do conjunto de valores do campo passado como parâmetro. Exemplo: SELECT min(comissao) FROM vendedor FUNÇÕES PARA STRING LOWER( string ) A função LOWER converte string maiúsculas para minúsculas. Exemplo: SELECT lower(nome) FROM vendedor UPPER( string ) A função UPPER converte string de minúsculas para maiúsculas. Exemplo: SELECT upper( nome) FROM vendedor 4 BANCO DE DADOS GERENCIAL SUBSTRING( string, inteiro, inteiro ) A função SUBSTRING obtém parte de uma string completa. Exemplo: SELECT substring(nome,4,6) FROM vendedor EXERCÍCIOS -- O BANCO DE DADOS DEVERÁ CONTROLAR A VENDA DE CADA VENDEDOR -- TABELA CADASTRO DE VENDEDORES create table vendedor ( codvendedor integer primary key, nome varchar(40) not null, percomissao integer not null ) -- TABELA PARA CONTROLAR A VENDA DE CADA VENDEDOR create table vendas ( codvenda integer primary key, datavenda date not null, valor numeric(10,2) not null, codvendedor integer references vendedor(codvendedor) ) 5 BANCO DE DADOS GERENCIAL -- INCLUIR DADOS DOS VENDEDORES INSERT INTO vendedor VALUES (1, 'Pedro', 8); INSERT INTO vendedor VALUES (2, 'Marcos', 5); INSERT INTO vendedor VALUES (3, 'Jair', 9); -- INCLUIR DADOS DAS VENDAS FEITAS PELOS VENDEDORES INSERT INTO vendas VALUES (1, '10/05/2016', 300.00, 1); INSERT INTO vendas VALUES (2, '09/05/2016', 1000.00, 3); INSERT INTO vendas VALUES (3, '14/05/2016', 140.00, 1); INSERT INTO vendas VALUES (4, '05/05/2016', 1200.00, 2); INSERT INTO vendas VALUES (5, '04/05/2016', 1000.00, 3); INSERT INTO vendas VALUES (6, '10/05/2016', 1000.00, 2); -- SELECIONAR TODOS OS VENDEDORES E SUAS RESPECTIVAS VENDAS SELECT * FROM vendedor INNER JOIN vendas vendedor.codvendedor=vendas.codvendedor ORDER BY nome -- CÁLCULOS ARIMÉTICOS -- CALCULAR A COMISSÃO DO VENDEDOR SELECT nome, valor, percomissao, (valor * percomissao)/100 FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor ON BANCO DE DADOS GERENCIAL 6 -- CALCULAR VENDA - COMISSÃO SELECT nome, valor, percomissao, (valor * percomissao)/100 as comissao, valor - (valor * percomissao)/100 as sobrou FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor -- FUNÇÕES MATEMÁTICAS -- CEIL() - ARREDONDA O VALOR PARA O PRÓXIMO NÚMERO INTEIRO SELECT nome, valor, percomissao, ceil((valor * percomissao)/100), ceil(valor - (valor * percomissao)/100) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor -- TRUNC() - ARREDONDA PARA (N) CASAS DECIMAIS SELECT nome, valor, percomissao, trunc((valor * percomissao)/100,2), trunc(valor - (valor * percomissao)/100,2) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor -- FUNÇÃO COUNT(*) - CONTAR A QUANTIDADE DE VENDAS DE CADA VENDEDOR SELECT nome, count(*) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor GROUP BY nome -- FUNÇÃO SUM() - SOMAR A QUANTIA VENDIDA DE CADA VENDEDOR SELECT nome, sum(valor) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor GROUP BY nome BANCO DE DADOS GERENCIAL -- FUNÇÃO MIN() - VERIFICAR O MENOR VALOR VENDIDO DE CADA VENDEDOR SELECT nome, MIN(valor) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor GROUP BY nome -- FUNÇÃO MAX() - VERIFICAR O MAIOR VALOR VENDIDO DE CADA VENDEDOR SELECT nome, MAX(valor) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor GROUP BY nome -- FUNÇÕES STRING -- LOWER() - CONVERTER O NOME DO VENDEDOR PARA CAIXA BAIXA SELECT lower(nome) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor ORDER BY nome -- UPPER() - CONVERTER O NOME DO VENDEDOR PARA CAIXA ALTA SELECT upper(nome) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor ORDER BY nome -- SUBSTRING() - OBTÉM PARTE DE UMA STRING SELECT substring(nome,2,4) FROM vendedor INNER JOIN vendas ON vendedor.codvendedor=vendas.codvendedor ORDER BY nome 7