Clientes

Listar clientes que não fizeram pedidos nos últimos 90 dias

Firebird
SELECT c.id, c.nome, c.email
FROM clientes c
WHERE NOT EXISTS (
  SELECT 1 FROM pedidos p
  WHERE p.cliente_id = c.id
    AND p.data_pedido >= DATEADD(day, -90, CURRENT_DATE)
)
NOT EXISTSDATEADDsubquery
Usar no gerador
Clientes

Top 5 clientes por valor total de compras

Firebird
SELECT c.nome, SUM(p.valor_total) AS total_compras
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.nome
ORDER BY total_compras DESC
ROWS 5
JOINGROUP BYORDER BYROWS
Usar no gerador
Clientes

Buscar clientes por cidade e estado

Firebird
SELECT nome, cidade, estado, telefone
FROM clientes
WHERE cidade = 'São Paulo' AND estado = 'SP'
ORDER BY nome
WHEREORDER BYfiltro textual
Usar no gerador
Vendas

Vendas totais por vendedor no mês atual

Firebird
SELECT v.nome, SUM(p.valor_total) AS total
FROM vendedores v
JOIN pedidos p ON p.vendedor_id = v.id
WHERE EXTRACT(MONTH FROM p.data_pedido) = EXTRACT(MONTH FROM CURRENT_DATE)
  AND EXTRACT(YEAR FROM p.data_pedido) = EXTRACT(YEAR FROM CURRENT_DATE)
GROUP BY v.nome
ORDER BY total DESC
EXTRACTJOINGROUP BY
Usar no gerador
Vendas

Pedidos com valor acima da média geral

Firebird
SELECT id, cliente_id, valor_total
FROM pedidos
WHERE valor_total > (SELECT AVG(valor_total) FROM pedidos)
ORDER BY valor_total DESC
subqueryAVGcomparação
Usar no gerador
Vendas

Vendas por categoria de produto

Firebird
SELECT cat.nome AS categoria, SUM(ip.quantidade * ip.preco_unitario) AS total_vendas
FROM itens_pedido ip
JOIN produtos p ON p.id = ip.produto_id
JOIN categorias cat ON cat.id = p.categoria_id
JOIN pedidos ped ON ped.id = ip.pedido_id
GROUP BY cat.nome
ORDER BY total_vendas DESC
JOIN múltiploSUMGROUP BY
Usar no gerador
Vendas

Top 10 produtos mais vendidos no último mês

Firebird
SELECT p.nome, SUM(i.quantidade) AS total_vendido
FROM itens_pedido i
JOIN produtos p ON p.id = i.produto_id
JOIN pedidos ped ON ped.id = i.pedido_id
WHERE ped.data_pedido >= DATEADD(month, -1, CURRENT_DATE)
GROUP BY p.nome
ORDER BY total_vendido DESC
ROWS 10
GROUP BYORDER BYDATEADDROWS
Usar no gerador
RH

Funcionários com salário acima da média do departamento

Firebird
SELECT f.nome, f.salario, d.nome AS departamento
FROM funcionarios f
JOIN departamentos d ON d.id = f.departamento_id
WHERE f.salario > (
  SELECT AVG(f2.salario) FROM funcionarios f2
  WHERE f2.departamento_id = f.departamento_id
)
subquery correlacionadaJOINAVG
Usar no gerador
RH

Contagem de funcionários por departamento

Firebird
SELECT d.nome AS departamento, COUNT(f.id) AS qtd_funcionarios
FROM departamentos d
LEFT JOIN funcionarios f ON f.departamento_id = d.id
GROUP BY d.nome
ORDER BY qtd_funcionarios DESC
LEFT JOINCOUNTGROUP BY
Usar no gerador
RH

Funcionários admitidos nos últimos 6 meses

Firebird
SELECT nome, cargo, data_admissao
FROM funcionarios
WHERE data_admissao >= DATEADD(month, -6, CURRENT_DATE)
ORDER BY data_admissao DESC
WHEREDATEADDORDER BY
Usar no gerador
Estoque

Produtos com estoque abaixo do mínimo

Firebird
SELECT codigo, nome, estoque_atual, estoque_minimo
FROM produtos
WHERE estoque_atual < estoque_minimo
ORDER BY estoque_atual ASC
WHEREORDER BYcomparação
Usar no gerador
Estoque

Valor total do estoque por categoria

Firebird
SELECT c.nome AS categoria, SUM(p.estoque_atual * p.preco_custo) AS valor_estoque
FROM produtos p
JOIN categorias c ON c.id = p.categoria_id
GROUP BY c.nome
ORDER BY valor_estoque DESC
JOINSUMGROUP BYexpressão
Usar no gerador
Estoque

Produtos sem movimentação nos últimos 60 dias

Firebird
SELECT p.codigo, p.nome
FROM produtos p
WHERE NOT EXISTS (
  SELECT 1 FROM movimentacoes_estoque m
  WHERE m.produto_id = p.id
    AND m.data_mov >= DATEADD(day, -60, CURRENT_DATE)
)
NOT EXISTSDATEADDsubquery
Usar no gerador
Financeiro

Contas a pagar vencidas nos últimos 30 dias

Firebird
SELECT fornecedor, valor, data_vencimento
FROM contas_pagar
WHERE data_vencimento < CURRENT_DATE
  AND data_vencimento >= DATEADD(day, -30, CURRENT_DATE)
  AND status = 'ABERTA'
ORDER BY data_vencimento
WHEREDATEADDCURRENT_DATEORDER BY
Usar no gerador
Financeiro

Saldo de entradas e saídas por mês

Firebird
SELECT EXTRACT(MONTH FROM data) AS mes,
       SUM(CASE WHEN tipo = 'ENTRADA' THEN valor ELSE 0 END) AS entradas,
       SUM(CASE WHEN tipo = 'SAIDA' THEN valor ELSE 0 END) AS saidas
FROM lancamentos_financeiros
GROUP BY EXTRACT(MONTH FROM data)
ORDER BY mes
CASESUMEXTRACTGROUP BY
Usar no gerador
Relatórios

Relatório de vendas por dia da semana

Firebird
SELECT EXTRACT(WEEKDAY FROM data_pedido) AS dia_semana,
       COUNT(*) AS qtd_pedidos, SUM(valor_total) AS total
FROM pedidos
GROUP BY EXTRACT(WEEKDAY FROM data_pedido)
ORDER BY dia_semana
EXTRACTCOUNTSUMGROUP BY
Usar no gerador
Relatórios

Clientes com maior ticket médio

Firebird
SELECT c.nome, AVG(p.valor_total) AS ticket_medio, COUNT(p.id) AS qtd_pedidos
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.nome
HAVING COUNT(p.id) >= 3
ORDER BY ticket_medio DESC
HAVINGAVGJOINGROUP BY
Usar no gerador