Locações em aberto SELECT c.nome, l.* FROM locacao l JOIN clientes c ON c.id = l.id_cliente WHERE l.data_fim_real IS NULL; Locações devolvidas SELECT c.nome, l.* FROM locacao l JOIN clientes c ON c.id = l.id_cliente WHERE l.data_fim_real IS NOT NULL; Locações pagas SELECT l.id, c.nome, p.valor_total FROM pagamento p JOIN locacao l ON l.id = p.id_locacao JOIN clientes c ON c.id = l.id_cliente WHERE p.id_status_pagamento = 3; Locações não pagas SELECT l.id, c.nome, p.valor_total FROM pagamento p JOIN locacao l ON l.id = p.id_locacao JOIN clientes c ON c.id = l.id_cliente WHERE p.id_status_pagamento <> 3; Com manutenção SELECT DISTINCT c.nome, l.id FROM manutencao m JOIN maquinas maq ON maq.id = m.id_maquina JOIN maquina_locacao ml ON ml.id_maquinas = maq.id JOIN locacao l ON l.id = ml.id_locacao JOIN clientes c ON c.id = l.id_cliente; Sem manutenção SELECT c.nome, l.id FROM locacao l JOIN clientes c ON c.id = l.id_cliente WHERE l.id NOT IN ( SELECT ml.id_locacao FROM manutencao m JOIN maquina_locacao ml ON ml.id_maquinas = m.id_maquina ); Despesa geral(manutenção) SELECT SUM(preco) AS despesa_total FROM manutencao; Despesa por cliente SELECT c.nome, SUM(m.preco) AS gasto FROM manutencao m JOIN maquinas maq ON maq.id = m.id_maquina JOIN maquina_locacao ml ON ml.id_maquinas = maq.id JOIN locacao l ON l.id = ml.id_locacao JOIN clientes c ON c.id = l.id_cliente GROUP BY c.nome; Top 5 clientes mais Lucrativos SELECT c.nome, SUM(p.valor_total) AS total_pago FROM pagamento p JOIN locacao l ON l.id = p.id_locacao JOIN clientes c ON c.id = l.id_cliente GROUP BY c.nome ORDER BY total_pago DESC LIMIT 5; Top 5 maiores despesas SELECT c.nome, SUM(m.preco) AS total_gasto FROM manutencao m JOIN maquinas maq ON maq.id = m.id_maquina JOIN maquina_locacao ml ON ml.id_maquinas = maq.id JOIN locacao l ON l.id = ml.id_locacao JOIN clientes c ON c.id = l.id_cliente GROUP BY c.nome ORDER BY total_gasto DESC LIMIT 5; lucro x manutenção SELECT SUM(p.valor_total) AS total_receita, (SELECT SUM(preco) FROM manutencao) AS total_manutencao, SUM(p.valor_total) - (SELECT SUM(preco) FROM manutencao) AS lucro FROM pagamento p; Fluxo de caixa SELECT DATE_TRUNC('year', data_pagamento) AS ano, SUM(valor_pago) AS total_recebido FROM movimentacao WHERE data_pagamento BETWEEN '2020-01-01' AND '2025-12-31' GROUP BY ano ORDER BY ano; Alterar cadastro de máquinas UPDATE maquinas SET valor_diaria = 600.00, id_status = 2 -- (Alugada, por exemplo) WHERE id = 1; Alterar locação de um cliente UPDATE locacao SET data_fim_real = CURRENT_DATE, valor_locacao = 2200.00 WHERE id = 3; Alterar consertos UPDATE manutencao SET preco = preco * 1.10, descricao = 'Revisão geral atualizada' WHERE id = 1; marcar clientes devedores UPDATE clientes SET nome = nome || ' - DEVEDOR' WHERE id IN ( SELECT c.id FROM clientes c JOIN locacao l ON l.id_cliente = c.id JOIN pagamento p ON p.id_locacao = l.id LEFT JOIN movimentacao m ON m.id_pagamento = p.id GROUP BY c.id, p.valor_total HAVING COALESCE(SUM(m.valor_pago),0) < p.valor_total ) AND cidade = 'Lajeado'; top 3 clientes mais lucrativos UPDATE clientes SET nome = nome || ' - PREMIUM' WHERE id IN ( SELECT c.id FROM clientes c JOIN locacao l ON l.id_cliente = c.id JOIN pagamento p ON p.id_locacao = l.id GROUP BY c.id ORDER BY SUM(p.valor_total) DESC LIMIT 3 );