Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PGDay Campinas 2013 - Window Function e CTE – Surpreendente

672 views

Published on

“Window Function e CTE – Surpreendente”

Demonstrar esses recursos desconhecidos por muitos e como eles facilitam o dia a dia.
Rogério Augusto Bassete

PALESTRANTE
Rogério Augusto Bassete trabalha em desenvolvimento de sistemas a 17 anos e com PostgreSQL desde 1992. Utiliza PostgreSQL em mais de 1000 clientes em todo o Brasil. Foi palestrante da PgBR 2011.

--
Palestra apresentada no PGDay Campinas 2013

Published in: Software
  • Be the first to comment

  • Be the first to like this

PGDay Campinas 2013 - Window Function e CTE – Surpreendente

  1. 1. WINDOW FUNCTIONS e CTE surpreendente Rogério Bassete rogerio.bassete@gmail.com
  2. 2. Rogério Augusto Bassete • Trabalho na MicroWork Softwares • 16 anos experiência programação • 11 anos experiência em PostgreSQL • Palestrante da PGCON 2011
  3. 3. 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.
  4. 4. O QUE É COMMON TABLE EXPRESSION - CTE?
  5. 5. 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;
  6. 6. CTE – ONDE USAR? • SELECT; • INSERT; • UPDATE; • DELETE.
  7. 7. SGBD SUPORTE • PostgreSQL 8.4 • Oracle® • SQL Server® 2005 • DB2® • Firebird 2.1 • ...
  8. 8. VAMOS AS DEMOS!
  9. 9. O QUE É WINDOW FUNCTION?
  10. 10. 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
  11. 11. SGBD SUPORTE • PostgreSQL 8.4 • Oracle® 8i • SQL Server® 2005 • DB2® 6 • Firebird 3.0 • ...
  12. 12. 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
  13. 13. AGGREGATE FUNCTIONS • avg() • count() • max() • min() • sum() • Stddev() Fonte: http://www.postgresql.org/docs/9.2/interactive/functions-aggregate.html
  14. 14. 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)
  15. 15. VAMOS AS DEMOS!
  16. 16. OBRIGADO! rogerio.bassete@gmail.com rogerio.bassete@outlook.com

×