Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouVinícius Domingos Carmona Alterado mais de 5 anos atrás
1
Implementação e Optimização de Bancos de dados
Banco de Dados II Implementação e Optimização de Bancos de dados Funções agregadas em janela. Cláusula WITH. MsC. Leoder Alemañy Socarrás
2
Bases de Datos Actuales
¿Como crêem vocês que serão os tempos de resposta em consultas que requeiram da execução de subconsultas? ¿Como poderiam melhorar estes tempos de resposta para recuperar a mesma informação?
3
Objetivos Descrever a estrutura e funcionamento das funções agregadas. A cláusula WITH e a cláusula OVER.
4
Resumen Diseño de Bases de Datos: Modelo Entidad – Relación.
Normalización Patrones de diseño Transformación Implementación de Bases de Datos: Lenguaje SQL DML (Select, Insert, Delete, Update) DCL DDL (Create, Drop, Alter) Funciones y Vistas.
5
Resumo Implementação de Banco de Dados: Cláusula SELECT
Select …. (Funciones Agregadas) From ….. Tabela1 INNER JOIN Tabela2…..ON…. Where….. (Subconsultas, LIKE…) Group By Having (condição com funções agregadas) Order By … ASC….DESC…. Funções Agregadas: COUNT, AVG, MAX, MIN, SUM
6
Funções Agregadas em janela
As funções agregadas executam um cálculo em um conjunto de valores e retornam um único valor. Com exceção de COUNT, as funções agregadas ignoram valores nulos. Estão disponíveis em sistemas gestores de bancos de dados como Oracle, SQL Server, Sybase y DB2, PostgreSQL a partir da versão 8.4
7
¿Por que usar funciones em janelas?
Empleado (empid, departamento, salario, edad)
8
Pregunta ¿Qual é a diferença do salário de cada um dos empregados com respeito à média de seu departamento?
9
Solución SELECT e1.empid, e1.departamento, e1.salario, e1.edad,
(SELECT AVG(e2.salario) FROM empleado e2 WHERE e2.departamento=e1.departamento ) as promedio FROM empleado e1;
10
¿É a solução óptima? Esta solução mostra-nos os dados da cada empregado com a média de salário do departamento ao que ele corresponde. No entanto com o uso de funções agregadas em janela a solução seria mais simple e os tempos de respostas seriam menores.
11
Diferenças entre o uso de funções janela e o uso do GROUP BY
Com o GROUP BY obtemos um resultado com uma fila pela cada valor diferente do atributo usado no GROUP BY.
12
Funções janelas Uma função em janela devolve um valor pela a cada fila do resultado de uma consulta.
13
Sintaxe das funções janelas
OVER( [PARTITION BY expression [, ...]] [ORDER BY expression [ASC|DESC][NULLS{FIRST|LAST}][, ...]] [Frame-Clause] )
14
Parámetros Partition by: Realiza a separação lógica das N classes que compõem a partição criada de acordo à expressão definida. Order by: Especifica a maneira em que se ordenassem os dados dentro da classe. Este elemento é de muita importância num grupo importante de casos.
15
Cláusula Frame No frame define-se o conjunto de filas que tem-se em conta para computar o resultado da função analítica, naqueles casos em que se opere sobre uma parte dos dados e não sobre toda a classe. Especifica a maneira em que se ordenassem os dados dentro da classe. Este elemento é de vital importância num grupo importante de casos.
16
Sintaxe de Frame-Clause
[ RANGE | ROWS ] frame_start [ RANGE | ROWS ] BETWEEN frame_start AND frame_end E os valores que podem ser alocados são os seguintes: UNBOUNDED PRECEDING value PRECEDING CURRENT ROW value FOLLOWING UNBOUNDED FOLLOWING
17
Exemplo 1 Mostrar o empid, departamento, salário, idade e a média dos salários por departamento, para poder realizar a comparação. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento) AS promedio FROM empleado;
18
Resultados Mostrar o empid, departamento, salário, idade e a média dos salários por departamento, para poder realizar a comparação.
19
Ejemplo 1.1 Mostrar o nome, marca, peso, volumen, a média do peso e a média do volumen por marca, para poder realizar a comparação. SELECT nomb_prod, marca, peso, volumen, avg(peso) over (PARTITION BY marca) as peso_med, avg(volumen) over (PARTITION BY marca) as vol_med FROM producto;
20
Resultados
21
Ejemplo 2 Calcular a média dos salários tendo em conta a fila atual mais os salários das duas bichas seguintes que pertencem à partição. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento ORDER BY ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING ) AS salario_medio FROM empleado
22
Resultados
23
Mais funções Agregadas
row_number() percent_rank() last_value() rank() dense_rank() first_value()
24
Row number Computa um número de filas sequencial começando com 1 na primeira tupla na cada partição e de acordo ao ordenamento das tuplas na partição. Listar os empregados pela cada tipo de departamento. SELECT departamento, salario, edad , ROW_NUMBER() OVER (PARTITION BY departamento) FROM empleado;
25
Resultados
26
RANK É a faixa ou hierarquia que ocupa uma tupla R tendo em conta as tuplas que a precedem. A faixa se encontra duas tuplas numa posição empatada, atribui-lhes o mesmo número. Mostrar o lugar que ocupam os empregados ordenados pela idade. SELECT departamento, salario, edad , Rank() OVER (order by edad) FROM empleado;
27
Resultados
28
RANK Mostrar o lugar que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , Rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;
29
Resultados
30
DENSERANK O DENSERANK (faixa densa) outorga um número de ordem à tupla em dependência de seu posto no ordenamento sem deixar saltos na numeração. Mostrar o lugar que ocupam os empregados ordenados pela idade. SELECT departamento, salario, edad , dense_Rank() OVER (order by edad ) FROM empleado;
31
Resultados
32
DENSERANK Mostrar o lugar que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , dense_Rank() OVER (PARTITION BY departamento order by edad) FROM empleado;
33
Resultados
34
PERCENT_RANK Devolve o ranking relativo (rank() – 1) / (total de filas - 1) SELECT departamento, salario, edad , percent_rank() OVER (order by edad ) FROM empleado;
35
Resultados
36
PERCENT_RANK Mostrar o ranking relativo que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , percent_rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;
37
Resultados
38
LAST_VALUE Devolve o último valor do marco da janela para o atributo indicado. Mostrar os dados da cada empregado e a maior idade do departamento a que pertencem. SELECT departamento, salario, edad, last_value(edad) OVER (PARTITION BY departamento order by edad ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM empleado;
39
Resultados
40
FIRST_VALUE Devolve o primeiro valor do marco da janela para o atributo indicado. Mostrar los datos de cada empleado y la menor edad del departamento a que pertenecen. SELECT departamento, salario, edad, first_value(edad) OVER (PARTITION BY departamento order by edad ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM empleado;
41
Resultados
42
Conclusiones
43
CLÁUSULA WITH A cláusula WITH permite especificar uma ou mais subconsultas que serão referidas por seu nome na consulta principal. Uma propriedade útil das consultas WITH é que são avaliadas só uma vez pela cada execução da consulta principal, ainda se a consulta primária se refere a elas mais de uma vez.
44
Optimización de Consultas.
CLÁUSULA WITH Consultas Recursivas. Optimización de Consultas.
45
Optimización de Consultas
É uma consulta que faz referência a sua saída a partir do uso da cláusula with. WITH <alias_name> AS (sql_subquery_statement) SELECT column_list FROM <alias_name>[,tablename] [WHERE <join_condition>]
46
Optimizar o Rendimento de Consultas
¿Qual é a diferença do salário da cada um dos empregados com respeito à média de seu departamento? SELECT e1.empid, e1.departamento, e1.salario, e1.edad, (select avg(e2.salario) from empleado e2 where e2.departamento=e1.departamento ) as media FROM empleado e1;
47
Utilizando la cláusula WITH
WITH departamento_salario as (SELECT e2.departamento, AVG(e2.salario) as salario_promedio FROM empleado e2 GROUP BY departamento) SELECT e1.empid, e1.departamento, e1.salario, e1.edad, departamento_salario.salario_promedio FROM empleado e1, departamento_salario WHERE departamento_salario.departamento = e1.departamento;
48
Resultado
49
Optimizar el Rendimiento de Consultas
Mostrar para a cada empregado, além da media do salário de seu departamento, a idade média no departamento da cada um. SELECT e1.empid, e1.departamento, e1.salario, e1.edad, (select avg(e2.salario) from empleado e2 where e2.departamento=e1.departamento ) as salario_promedio, (select avg(e3.edad) from empleado e3 where e3.departamento=e1.departamento ) as edad_promedio FROM empleado e1;
50
Utilizando la cláusula WITH
WITH departamento_salario as (SELECT e2.departamento, AVG(e2.salario) as salario_promedio FROM empleado e2 GROUP BY departamento), departamento_edad as (SELECT e3.departamento, AVG(e3.edad) as edad_promedio FROM empleado e3 GROUP BY departamento) SELECT e1.empid, e1.departamento, e1.salario, e1.edad, departamento_salario.salario_promedio, departamento_edad.edad_promedio FROM empleado e1, departamento_salario, departamento_edad WHERE departamento_salario.departamento = e1.departamento AND e1.departamento = departamento_edad.departamento;
51
Resultados
52
Planificador de Consultas
Pode-se usar para mostrar o plano de execução que o planificador gera para uma consulta dada. Sintaxe: EXPLAIN PLAN FOR <query>
53
Utilidad del Planificador
O uso deste comando é importantíssimo para analisar a optimização de consultas quando se utilizam funciones de janelas ou a cláusula WITH. Para isso se deve analisar o plano de consulta com a resposta em sql básico e depois com a variante que se tenha eleito para a optimização dependendo do caso.
54
Conclusiones
55
Estudio Independiente
PERCENT_RANK LAST_VALUE FIRST_VALUE Consultas Recursivas utilizando la cláusula WITH
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.