-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwindow_functions.sql
More file actions
57 lines (51 loc) · 2.3 KB
/
Copy pathwindow_functions.sql
File metadata and controls
57 lines (51 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
-- ==========================================================
-- GUIA PRÁTICO: WINDOW FUNCTIONS (FUNÇÕES DE JANELA) EM SQL
-- ==========================================================
-- 1. Criação da tabela de vendas para estudo
DROP TABLE IF EXISTS vendas_estudo;
CREATE TABLE vendas_estudo (
id_venda INT AUTO_INCREMENT PRIMARY KEY,
vendedor VARCHAR(50) NOT NULL,
departamento VARCHAR(50) NOT NULL,
valor_venda DECIMAL(10, 2) NOT NULL,
data_venda DATE NOT NULL
);
-- 2. Inserção de dados para teste
INSERT INTO vendas_estudo (vendedor, departamento, valor_venda, data_venda) VALUES
('Alice', 'Eletrônicos', 1500.00, '2026-01-10'),
('Bruno', 'Eletrônicos', 2300.00, '2026-01-12'),
('Carlos', 'Eletrônicos', 1800.00, '2026-01-15'),
('Daniela', 'Móveis', 3200.00, '2026-01-10'),
('Eduardo', 'Móveis', 2900.00, '2026-01-14'),
('Fernanda', 'Móveis', 3200.00, '2026-01-18'),
('Alice', 'Eletrônicos', 2100.00, '2026-01-20'),
('Bruno', 'Eletrônicos', 1900.00, '2026-01-22'),
('Daniela', 'Móveis', 4100.00, '2026-01-25');
-- 3. Ranking e Numeração de Linhas
-- ROW_NUMBER, RANK e DENSE_RANK comparados
SELECT
vendedor,
departamento,
valor_venda,
ROW_NUMBER() OVER (PARTITION BY departamento ORDER BY valor_venda DESC) AS row_num,
RANK() OVER (PARTITION BY departamento ORDER BY valor_venda DESC) AS rank_pos,
DENSE_RANK() OVER (PARTITION BY departamento ORDER BY valor_venda DESC) AS dense_rank_pos
FROM vendas_estudo;
-- 4. Totais Acumulados e Médias Móveis
SELECT
vendedor,
data_venda,
valor_venda,
SUM(valor_venda) OVER (ORDER BY data_venda ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS total_acumulado_geral,
AVG(valor_venda) OVER (PARTITION BY departamento ORDER BY data_venda ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS media_movel_dep
FROM vendas_estudo;
-- 5. Funções de Deslocamento (LEAD e LAG)
-- Comparando a venda atual com a venda anterior do mesmo vendedor
SELECT
vendedor,
data_venda,
valor_venda,
LAG(valor_venda, 1, 0) OVER (PARTITION BY vendedor ORDER BY data_venda) AS venda_anterior,
valor_venda - LAG(valor_venda, 1, valor_venda) OVER (PARTITION BY vendedor ORDER BY data_venda) AS diferenca_anterior,
LEAD(valor_venda, 1, 0) OVER (PARTITION BY vendedor ORDER BY data_venda) AS proxima_venda
FROM vendas_estudo;