Baixe o app para aproveitar ainda mais
Prévia do material em texto
GROUP BY SUMÁRIO • Funções de Grupo • Clausula Group BY • Cláusula Having Funções de Grupos Funções de grupo operam sobre conjuntos de linhas. Elas retornam resultados baseados sobre um grupo de linhas, antes que um resultado por linha tenha retornado como uma função de linha única. Como padrão todas as linhas de um tabela são trilhadas como um grupo. A clausula GROUP BY da declaração do SELECT é usada para agrupar as linhas em menores grupos. • Funções de Grupo • AVG (x) • Retorna o valor médio da coluna x. • Exemplo: AVG (salario) • Ignora os valores nulos. • MAX (x) • Retorna o valor máximo da coluna x. • Exemplo: MAX (salario) • Ignora os valores nulos. • MIN (x) • Retorna o valor mínimo da coluna x. • Exemplo: MIN (salario) • Ignora os valores nulos. • SUM (x) • Retorna a soma da coluna x. • Exemplo: SUM (salario) • Ignora os valores nulos. • COUNT (x) • Retorna o número de valores não nulos da coluna x. • Exemplo: COUNT (perc_comissao) • COUNT (* ) • Retorna o número de linhas de uma tabela. • Exemplo: COUNT (*) • Considera os valores nulos. DISTINCT faz uma função de grupo considerar valores não duplicados; ALL considera todos os valores. Se omitida a consulta considera ALL como default; Implementação de Banco de Dados Professor Ventury 1 Exemplos AVG(X) SQL> SELECT AVG(salario) FROM C_EMPR; AVG (SALARIO) ---------------------- 1255,08 MAX(X) SQL> SELECT MAX(salario) FROM C_EMPR; MAX (SALARIO) ---------------------- 2500 MIN(X) SQL> SELECT MIN(salario) FROM C_EMPR; MIN (SALARIO) ---------------------- 750 SUM (X) SQL> SELECT SUM(salario) FROM C_EMPR; SUM (SALARIO) ---------------------- 31377 COUNT (*) SQL> SELECT COUNT(*) FROM C_EMPR; COUNT (*) --------------- 25 COUNT (X) SQL> SELECT COUNT(PERC_COMISSAO) FROM C_EMPR; COUNT (PERC_COMISSAO) ---------------------------------------- 5 Observação: apesar de existirem 25 empregados apenas 5 possuem valores diferentes de nulo na coluna perc_comissão. Implementação de Banco de Dados Professor Ventury 2 Aqrupando os Resultados da Querv Outro recurso do comando SELECT é a possibilidade de agruparmos nossos dados, utilizando a cláusula GROUP BY. Sintaxe: • SELECT nome da coluna [ , nome da coluna] FROM nome da tabela WHERE condição GROUP BY expressão onde expressão especifica as colunas cujos valores determinam a base para o grupo de linhas; group by produz uma linha sumarizada para cada grupo de linhas selecionado. Após utilizarmos a cláusula GROUP BY dividir as linhas de uma tabela em um grupo menor. Funções de grupo devem ser usadas para resumir informações por cada grupo. Por exemplo se desejamos saber a média salarial de cada departamento da empresa podemos dar o comando abaixo: Observe que a média salarial foi calculada para cada departamento e que listamos o id_Depto e o valor da média. Um cuidado a ser tomado é que na lista de colunas,quando usamos Group By somente podem constar funções de group ou colunas que estejam descriminadas na claúsula group by. Observe o exemplo da figura abaixo Observe o erro apontado pelo Oracle informando que SALARIO ( coluna com o asteristico embaixo) não é uma função de grupo nem esta na clausula group by. Grupos dentro de Grupos Podemos usar a clausula GROUP BY para prover resultados para grupos dentro de grupos. Implementação de Banco de Dados Professor Ventury 3 Se desejássemos listar a quantidade de empregados que temos em cada cargo em cada departamento poderíamos dar o comando mostrado na figura abaixo. Devemos tomar cuidado em discriminar todas as colunas que desejamos exibir na cláusula group by ou ocorrerá um erro com já vimos. Observe a figura abaixo e tire suas conclusões. Implementação de Banco de Dados Professor Ventury 4 Restringindo Dados Agrupados Quando utilizamos a cláusula GROUP BY podemos restringir nossa seleção de dados em dois momentos: antes ou depois do agrupamento (e seus cálculos: médias, totais, etc.). Decidiremos quando executar esta limitação de acordo com o momento em que a mesma pode ocorrer. Se não utilizarmos para tal decisão o resultado dos cálculos efetuados pela cláusula GROUP BY, podemos limitar nosso resultado através da cláusula WHERE, caso contrário devemos utilizar a cláusula HAVING. A Cláusula HAVING A cláusula HAVING tem função semelhante a cláusula WHERE, que é ser o elemento de declaração do Join entre resultados agrupados. Quando temos um comando GROUP BY, o SQL checa se existe pelo menos uma função de agrupamento assim como um elemento agrupador dos dados, caso contrário retornará um erro. O elemento agrupador, por sua vez, tem que estar referenciado na cláusula GROUP BY e caso o resultado de uma função de agrupamento deva ser submetido a comparação, utiliza-se a cláusula HAVING. Vejamos alguns exemplos Vamos alterar o comando anterior para que inclua apenas cargos que possuam o texto VP Tal valor já consta da tabela, não sendo necessário o agrupamento pela cláusula GROUP BY. Utilizaremos então a cláusula WHERE para efetuar a restrição. Vamos agora selecionar aqueles cuja soma dos salários seja igual ou maior que 2000. A clausula WHERE não pode ser usada para restringir itens de grupo. A seguinte declaração da clausula WHERE é errada. Implementação de Banco de Dados Professor Ventury 5 Este é um dado calculado pela cláusula GROUP BY, devendo portanto ser limitado pela cláusula HAVING, conforme podemos ver na figura abaixo. Você pode unicamente usar WHERE para restringir linhas individuais. Para restringir colunas de grupos usa-se a clausula HAVING: Podemos ainda utilizar a clausula Having filtrando por uma função de grupo que não aparece na lista do Select Uma observação importante é que mesmo que não estejamos utilizando um função de grupo na lista do Select, se tivermos uma clausula HAVING, ou seja, estejamos fazendo a filtragem do resultado por uma função de grupo obrigatoriamente temos que ter a clausula GROUP BY. Observe os erros nas figuras abaixo. Na figura acima utilizamos um clausula having sem group by . Implementação de Banco de Dados Professor Ventury 6 Na figura acima utilizamos uma função de grupo na clausula where . Funcionamento do Comando Group By Um comando com clausulas Where e Having funciona obedecendo os seguintes passos: 1 Primeiro as linhas são selecionadas as linhas da tabela que satisfazem a condição da cláusula Where( se não existir todas a linhas são selecionadas) 2 As linhas são agrupadas 3 A função de grupo é aplicada ao Grupo 4 Os grupos que satisfazem a condição do Having são exibidos ( se não existir todos os grupos serão exibidos) Comando Select O comando Select completo possui então o seguinte formato SELECT coluna(s) FROM tabela(s) WHERE condição linha GROUP BY coluna(s) HAVING condição de grupo de linhas ORDER BY coluna(s); Implementação de Banco de Dados Professor Ventury7 SUMÁRIO Funções de Grupo Clausula Group BY Funções de Grupos Exemplos Aqrupando os Resultados da Querv Após utilizarmos a cláusula GROUP BY dividir as linhas de u Observe o erro apontado pelo Oracle informando que SALARIO Grupos dentro de Grupos Se desejássemos listar a quantidade de empregados que temos Devemos tomar cuidado em discriminar todas as colunas que de Observe a figura abaixo e tire suas conclusões. Restringindo Dados Agrupados A Cláusula HAVING Vejamos alguns exemplos Podemos ainda utilizar a clausula Having filtrando por uma f Uma observação importante é que mesmo que não estejamos util Funcionamento do Comando Group By Um comando com clausulas Where e Having funciona obedecendo Primeiro as linhas são selecionadas as linhas da tabela que As linhas são agrupadas A função de grupo é aplicada ao Grupo Comando Select
Compartilhar