17
WINDOW FUNCTIONS e CTE surpreendente Rogério Bassete [email protected]

PGDay Campinas 2013 - Window Function e CTE – Surpreendente

Embed Size (px)

Citation preview

Page 1: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

WINDOW FUNCTIONS e

CTE surpreendente

Rogério Bassete [email protected]

Page 2: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

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

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

O QUE É COMMON TABLE EXPRESSION - CTE?

Page 5: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

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

CTE – ONDE USAR?

• SELECT;

• INSERT;

• UPDATE;

• DELETE.

Page 7: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

SGBD SUPORTE

• PostgreSQL 8.4

• Oracle®

• SQL Server® 2005

• DB2®

• Firebird 2.1

• ...

Page 8: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

VAMOS AS DEMOS!

Page 9: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

O QUE É WINDOW FUNCTION?

Page 10: PGDay Campinas 2013 - Window Function e CTE – Surpreendente
Page 11: PGDay Campinas 2013 - Window Function e CTE – Surpreendente

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

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

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

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

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

VAMOS AS DEMOS!