PGDay Campinas 2013 - Window Function e CTE – Surpreendente
-
Upload
pgday-campinas -
Category
Software
-
view
57 -
download
0
Transcript of PGDay Campinas 2013 - Window Function e CTE – Surpreendente
![Page 2: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/2.jpg)
Rogério Augusto Bassete
• Trabalho na MicroWork Softwares
• 16 anos experiência programação
• 11 anos experiência em PostgreSQL
• Palestrante da PGCON 2011
![Page 3: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/3.jpg)
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.
![Page 4: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/4.jpg)
O QUE É COMMON TABLE EXPRESSION - CTE?
![Page 5: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/5.jpg)
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;
![Page 6: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/6.jpg)
CTE – ONDE USAR?
• SELECT;
• INSERT;
• UPDATE;
• DELETE.
![Page 7: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/7.jpg)
SGBD SUPORTE
• PostgreSQL 8.4
• Oracle®
• SQL Server® 2005
• DB2®
• Firebird 2.1
• ...
![Page 8: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/8.jpg)
VAMOS AS DEMOS!
![Page 9: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/9.jpg)
O QUE É WINDOW FUNCTION?
![Page 10: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/10.jpg)
![Page 11: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/11.jpg)
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
![Page 12: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/12.jpg)
SGBD SUPORTE
• PostgreSQL 8.4
• Oracle® 8i
• SQL Server® 2005
• DB2® 6
• Firebird 3.0
• ...
![Page 13: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/13.jpg)
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
![Page 14: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/14.jpg)
AGGREGATE FUNCTIONS
• avg() • count() • max() • min() • sum() • Stddev()
Fonte: http://www.postgresql.org/docs/9.2/interactive/functions-aggregate.html
![Page 15: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/15.jpg)
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)
![Page 16: PGDay Campinas 2013 - Window Function e CTE – Surpreendente](https://reader033.fdocuments.net/reader033/viewer/2022042518/55a915f41a28ab0d2f8b4664/html5/thumbnails/16.jpg)
VAMOS AS DEMOS!