ClientesListar 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
ClientesTop 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
ClientesBuscar 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
VendasVendas 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
VendasPedidos 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
VendasVendas 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
VendasTop 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
RHFuncioná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
RHContagem 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
RHFuncioná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
EstoqueProdutos 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
EstoqueValor 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
EstoqueProdutos 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
FinanceiroContas 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
FinanceiroSaldo 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
RelatóriosRelató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
RelatóriosClientes 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