This document discusses using window functions in PostgreSQL to analyze sales data. It shows a table with movie titles, categories, and total sales. Window functions can be used to calculate things like running totals, ranks, and more to analyze the sales data across rows.
2. Fábio Telles Rodriguez
• Consultor pela Timbira
• DBA Oracle e PostgreSQL + 15 anos
• Colaborador da Comunidade Brasileira de PostgreSQL
• Blog: savepoint.blog.br
• telles@timbira.com.br
• @telles
4. Antes de mais nada...
Aprenda a usar o seu ORM
Aprenda quando NÃO USAR o seu ORM
5. Antes de mais nada...
Aprenda quando NÃO USAR o seu ORM
• Não utilizar para relatórios e consultas complexas
• Não utilizar para transações complexas (BEGIN …. COMMIT /
ROLLBACK)
• Utilizar apenas em operações CRUD
21. VACUUM, ANALYZE
NÃO DESLIGUE O AUTOVACUUM!
• Limpa tuplas mortas
• Atualiza estatísticas
• Previne esgotamento de numeração de transações
• Roda por padrão automaticamente cada vez que
• 20% dos registros da tabela são atualizados
• 50 registros são atualizados
• Permite ajuste individual por tabela
• pg_stat_user_tables
24. Índices
Quando o PostgreSQL não usa o índice:
• Baixo volume de dados (<1000);
• Baixa seletividade (> ~10%);
• Tipos de dados não batem (integer = numeric)
• Funções no WHERE (nome || sobrenome = ‘Fábio Telles’)
25. Tipos de dados
• Numeros: INTEGER, NUMERIC, FLOAT
• Alfanumérico: CHAR, VARCHAR, TEXT
• Tempo: DATE, TIME, TIMESTAMP, INTERVAL
• Geoméricos: ponto, linha, polígono, etc
• Boolean, Enum, bytea
• Network, bit string, Full Text Search
• XML, JSONB, UUID
• Arrays, tipos compostos, Range types
26. Carga de dados
• INSERT TRADICIONAL
INSERT INTO t1 (a,b,c) VALUES (1, 'aaa', '2017-12-08');
INSERT INTO t1 (a,b,c) VALUES (2, 'bbb', '2017-12-07');
INSERT INTO t1 (a,b,c) VALUES (3, 'ccc', '2017-12-06');
INSERT INTO t1 (a,b,c) VALUES (4, 'ddd', '2017-12-05');
27. Carga de dados
• INSERT múltiplo
INSERT INTO t1 (a,b,c) VALUES
(1, 'aaa', '2017-12-08'),
(2, 'bbb', '2017-12-07'),
(3, 'ccc', '2017-12-06'),
(4, 'ddd', '2017-12-05')
;
29. Carga de dados
• COPY
COPY t1 (a, b, c) FROM stdin;
1 aaa 2017-12-08
2 bbb 2017-12-07
3 ccc 2017-12-06
4 ddd 2017-12-05
.
30. Carga de dados
• SUBSELECT
INSERT INTO t1 (a,b,c) SELECT m,n,o FROM t2 WHERE status = 0;
31. Carga de dados
• RETURNING
> CREATE TABLE t3 (id serial, nome varchar);
CREATE TABLE
> INSERT INTO t3 (nome) VALUES ('Fábio')RETURNING id;
id
----
1
> INSERT INTO t3 (nome) VALUES ('Telles') RETURNING id;
id
----
2
32. Carga de dados
• CTE (Common Table Expression) + RETURNING
WITH upd AS (
UPDATE t2 SET c = c + '7 days'::interval WHERE a = 3
RETURNING *)
INSERT INTO t1 SELECT a, b, c FROM upd;
39. Window Functions
SELECT
category, title,
trunc((soma / total) * 100,2) AS "%",
CASE
WHEN (soma / total) <= 0.2 THEN 'A'
WHEN (soma / total) > 0.2 AND (soma / total) <= 0.8 THEN 'B'
ELSE 'C'
END AS curva_abc
FROM
(SELECT
title, category, total_sales,
sum(total_sales) OVER (PARTITION BY category) total,
rank() OVER (PARTITION BY category ORDER BY total_sales DESC) AS rank,
sum(total_sales) OVER (PARTITION BY category ORDER BY total_sales DESC) AS soma
FROM sales_pgday) sales
ORDER BY category, "%";
40. Window Functions
category | title | % | curva_abc
---------------+-----------------------------+------+-----------
Action | FOOL MOCKINGBIRD | 0.26 | A
Action | AMERICAN CIRCUS | 0.50 | A
Action | STAGECOACH ARMAGEDDON | 0.73 | A
...
Action | CAMPUS REMEMBER | 2.99 | A
Action | FORREST SONS | 3.12 | A
Action | DEVIL DESIRE | 3.24 | A
Action | KISSING DOLLS |21.63 | B
Action | TRIP NEWTON |24.96 | B
Action | DRIFTER COMMANDMENTS |28.20 | B
Action | SUSPECTS QUILLS |31.25 | B
...
Action | BAREFOOT MANCHURIAN |70.56 | B
Action | HANDICAP BOONDOCK |72.02 | B
Action | GRAIL FRANKENSTEIN |78.65 | B
Action | SHRUNK DIVINE |79.86 | B
Action | CADDYSHACK JEDI |81.05 | C
Action | GOSFORD DONNIE |82.16 | C
Action | ENTRAPMENT SATISFACTION |83.26 | C
...
41. Window Functions
category | title | % | curva_abc
---------------+-----------------------------+------+-----------
Action | FOOL MOCKINGBIRD | 0.26 | A
Action | AMERICAN CIRCUS | 0.50 | A
Action | STAGECOACH ARMAGEDDON | 0.73 | A
...
Action | CAMPUS REMEMBER | 2.99 | A
Action | FORREST SONS | 3.12 | A
Action | DEVIL DESIRE | 3.24 | A
Action | KISSING DOLLS |21.63 | B
Action | TRIP NEWTON |24.96 | B
Action | DRIFTER COMMANDMENTS |28.20 | B
Action | SUSPECTS QUILLS |31.25 | B
...
Action | BAREFOOT MANCHURIAN |70.56 | B
Action | HANDICAP BOONDOCK |72.02 | B
Action | GRAIL FRANKENSTEIN |78.65 | B
Action | SHRUNK DIVINE |79.86 | B
Action | CADDYSHACK JEDI |81.05 | C
Action | GOSFORD DONNIE |82.16 | C
Action | ENTRAPMENT SATISFACTION |83.26 | C
...