Upload
pgday-campinas
View
56
Download
0
Embed Size (px)
Citation preview
Rogério Augusto Bassete
• Trabalho na MicroWork Softwares
• 16 anos experiência programação
• 11 anos experiência em PostgreSQL
• Palestrante da PGCON 2011
MOTIVAÇÕES
• Poucas pessoas conhecem WINDOW FUNCTION e/ou COMMON TABLE EXPRESSION - CTE;
• É muito complicado de usar;
• Faço o mesmo com sub-select;
• Crio tabela temporária;
• Faço isso no meu código fonte.
O QUE É COMMON TABLE EXPRESSION - CTE?
CTE fornece um maneira de escrever subconsultas para uso em uma instrução maior. Existe apenas
durante a execução de uma consulta. (intenet)
WITH cte AS (
SELECT * FROM funcionario
)
SELECT * FROM cte;
CTE – ONDE USAR?
• SELECT;
• INSERT;
• UPDATE;
• DELETE.
SGBD SUPORTE
• PostgreSQL 8.4
• Oracle®
• SQL Server® 2005
• DB2®
• Firebird 2.1
• ...
VAMOS AS DEMOS!
O QUE É WINDOW FUNCTION?
Window Function é uma função aplicada sobre um conjunto de dados.
(Itzik Ben-Gan)
SELECT dep, nome, salario,
avg(salario) OVER (PARTITION BY dep) AS media
FROM funcionario
SGBD SUPORTE
• PostgreSQL 8.4
• Oracle® 8i
• SQL Server® 2005
• DB2® 6
• Firebird 3.0
• ...
WINDOW FUNCTIONS
• row_number()
• rank()
• dense_rank()
• percent_rank()
• cume_dist()
• ntile()
• lag()
• lead()
• first_value()
• last_value()
• nth_value()
Fonte: http://www.postgresql.org/docs/9.2/interactive/functions-window.html
AGGREGATE FUNCTIONS
• avg() • count() • max() • min() • sum() • Stddev()
Fonte: http://www.postgresql.org/docs/9.2/interactive/functions-aggregate.html
GANHOS?
SELECT
f2.departamento, f2.nome, f2.salario,
( SELECT avg(f1.salario) FROM funcionario f1 WHERE
f1.departamento = f2.departamento
) AS media
FROM funcionario f2
ORDER BY f2.departamento;
(cost=2675.12..2675.65 rows=210 width=352)
SELECT departamento, nome, salario,
avg(salario) OVER (PARTITION BY departamento) AS media
FROM funcionario
ORDER BY departamento;
(cost=20.20..23.87 rows=210 width=352)
VAMOS AS DEMOS!