Gabarito Exercício SQL

mail@pastecode.io avatar
unknown
sql
2 years ago
2.1 kB
1
Indexable
Never
SELECT
conta.numero AS conta,cliente_pai ,nome AS cliente_dependente
FROM cliente
JOIN cliente_conta ON cliente_conta.id_cliente=cliente.id 
JOIN (select cliente.nome AS cliente_pai,cliente_conta.id_conta AS conta_pai
FROM cliente 
JOIN cliente_conta ON cliente_conta.id_cliente=cliente.id
WHERE dependente=false) AS clientes_pai
ON conta_pai = cliente_conta.id_conta
JOIN conta ON conta.id=cliente_conta.id_conta
WHERE dependente=true
ORDER BY conta;

--2 Quais foram as 5 que:
-- Mais fizeram transações

SELECT 
conta.numero AS conta, COUNT(transacao.id) AS transacoes
FROM transacao
JOIN cliente_conta ON cliente_conta.id = transacao.id_cliente_conta
JOIN conta ON conta.id = cliente_conta.id_conta
GROUP BY id_cliente_conta
ORDER BY transacoes DESC
LIMIT 5;

-- Menos fizeram transações

SELECT 
conta.numero AS conta, COUNT(transacao.id) AS transacoes
FROM transacao
JOIN cliente_conta ON cliente_conta.id = transacao.id_cliente_conta
JOIN conta ON conta.id = cliente_conta.id_conta
GROUP BY id_cliente_conta
ORDER BY transacoes
LIMIT 5;

--3 Tivemos uma perda de dados e não sabemos qual é o saldo de cada conta, mas temos todas as transações efetuadas.
-- Queremos saber qual saldo total das contas registradas em banco!
-- Reparem que temos alguns tipos de transações que subtraem dinheiro e outros que somam.

SELECT
conta.numero AS conta, depositos.total_depositos, debitos.total_debitos, (depositos.total_depositos-debitos.total_debitos) AS saldo
FROM conta
JOIN (SELECT conta.numero AS conta, SUM(valor) AS total_depositos
FROM transacao
JOIN cliente_conta ON cliente_conta.id = transacao.id_cliente_conta
JOIN conta ON conta.id = cliente_conta.id_conta
WHERE id_tipo_transacao= 1
GROUP BY conta) AS depositos ON depositos.conta = conta.numero
JOIN (SELECT conta.numero AS conta, SUM(valor) AS total_debitos
FROM transacao 
JOIN cliente_conta ON cliente_conta.id = transacao.id_cliente_conta
JOIN conta ON conta.id = cliente_conta.id_conta
WHERE id_tipo_transacao <> 1
GROUP BY conta) AS debitos ON debitos.conta = conta.numero;