PL/SQL Agregar dados – Funções (Agrupar dados).
1fevereiro 14, 2011 por Geisimar Rech
Agradecimentos ao Rosenildo por mais este tutorial de PL/SQL.
Comandos
— AVG ( ) Faz a media Aritimética
— COUNT ( ) Conta todos os registros
— MAX ( ) traz o nº max. da coluna em especificação na tabela no banco
— MIN ( ) Traz o nº min. da coluna em especificação na tabela no banco
— STDDEV ( )
— SUM ( ) Soma todos os valores do tipo real de uma determinada tabela no banco
— VARIANCE ( )
Structured:
Cláusula where não é usada em agregação de dados, mas substituída pelo HAVING, mas também não me impede de usar o where em determinadas situações exemplo abaixo:
SELECT <columns> FROM <tables>
[HAVING <conditions>] // substituição Where por Having
[GROUP BY <columns>]
[ORDER BY <columns>]
1)
SELECT AVG(LASARY) AS MEDIA DOS SALARY
,MIN(SALARY) AS MIN
,MAX(SALARY) AS MAX
,SUM(SALARY) AS SUM
FROM EMPLOYEES
Obs.: Neste exemplo fiz um select com as funções AVG, MIN, MAX SUM onde cada uma delas faz sua função. Veja que a media veio com o valor quebrado, a função AVG trás o resultado final para diminuir este valo podemos arredondar
SELECT ROUND(AVG(LASARY)) AS MEDIA DOS SALARY
,MIN(SALARY) AS MIN
,MAX(SALARY) AS MAX
,SUM(SALARY) AS SUM
FROM EMPLOYEES
2)
SELECT COUNT(*) FROM EMPLOYEES
Obs.: A Função Count ( ) conta tudo aquilo que vc colocar entre os parêntese, no exemplo coloque * para Count contar todos os registros poderia ter colocado uma coluna de um tabela tbm… exemplo:
SELECT COUNT (EMPLOYEE_ID) FROM EMPLOYEES traria o mesmo resultado que o (*), isso venha ser um parâmetro que você aponta como requerido
3)
SELECT COUNT (DISTINCT DEPARTMENT_ID) FROM EMPLOYEES
Diferença entre Count e Distinct:
Count conta todos os registro de uma coluna apontada para uma determinada tabela, ou seja, se existir 3 departamentos com o nº 5, ele conta como sendo diferente um do outro, já o Distinct não, ele conta os departamentos repetidos, mas considera apenas um, trazendo assim o nº exato de departamentos.
à Como se nota usei o comando COUNT onde ele pode trabalhar de forma distinta e dentro dele o DISTINCT isso nos proporciona grande vantagem em me trazer apenas valores únicos em consultas, onde primeiramente executo o comando Distinct e logo após o Count vem e conta os departamentos encontrados pelo Distinct
——— GROUP BY, ORDER BY ———-
SELECT DEPARTMENT_ID
,JOB_ID
,ROUND(AVG(SALARY)) AS MEDIA_SALARIO
FROM EMPLOYEES
HAVING AVG(SALARY) > 6000
GROUP BY DEPARTMENT_ID, JOB_ID
ORDER BY DEPARTMENT_ID

Gostaria de mais exemplo sobre PL, muito interessante, por favor mais exemplos