pgday campinas 2013 - window function e cte – surpreendente

Post on 17-Jul-2015

57 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

WINDOW FUNCTIONS e

CTE surpreendente

Rogério Bassete rogerio.bassete@gmail.com

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!

OBRIGADO!

rogerio.bassete@gmail.com

rogerio.bassete@outlook.com

top related