1
resposta

Resolução - identificar empréstimos acima da média

Boa tarde!

SELECT
    NOME,
    TO_CHAR(VALOR, 'L999G999G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') AS VALOR
FROM
    CLIENTES
JOIN
    EMPRESTIMO
ON
    CLIENTES.ID_CLIENTE = EMPRESTIMO.ID_CLIENTE
WHERE
    VALOR > (SELECT AVG(VALOR) FROM EMPRESTIMO);

Saída:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Estudante. Como vai?

Parabéns pela resolução do exercício! O seu código SQL está excelente e demonstra uma compreensão sólida sobre o funcionamento de subconsultas (subqueries) não correlacionadas e junções de tabelas.

Analisando a imagem do resultado que você compartilhou, fica claro que a sua consulta funcionou perfeitamente. Gostaria de destacar duas ótimas práticas que você aplicou muito bem no seu script:

  • Subconsulta no WHERE: Utilizar (SELECT AVG(VALOR) FROM EMPRESTIMO) dentro da cláusula WHERE é a forma mais inteligente e dinâmica de resolver esse problema. Como o banco de dados calcula a média primeiro e depois filtra a tabela principal, o seu código continuará funcionando perfeitamente mesmo se novos empréstimos forem inseridos ou se os valores mudarem com o tempo.
  • Formatação com TO_CHAR: Essa função no Oracle SQL é fantástica. Configurar o formato 'L999G999G990D00' juntamente com o parâmetro 'NLS_NUMERIC_CHARACTERS = '',.'''' garante que a saída do banco de dados venha perfeitamente formatada na moeda local (R$), utilizando o ponto como separador de milhar e a vírgula como separador decimal. O resultado na imagem ficou super limpo e profissional!

Como uma única sugestão de boa prática para o seu dia a dia com SQL, quando trabalhamos com consultas que envolvem o agrupamento de mais de uma tabela (JOIN), é altamente recomendado utilizar apelidos (aliases) para as tabelas e adicioná-los antes de cada coluna selecionada.

Embora o seu código funcione perfeitamente porque os nomes das colunas NOME e VALOR parecem ser exclusivos de suas respectivas tabelas, se no futuro a tabela CLIENTES também ganhasse uma coluna chamada VALOR, o banco de dados retornaria um erro de ambiguidade. Veja como aplicar essa proteção de forma simples:

SELECT
    c.NOME,
    TO_CHAR(e.VALOR, 'L999G999G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') AS VALOR
FROM
    CLIENTES c
JOIN
    EMPRESTIMO e ON c.ID_CLIENTE = e.ID_CLIENTE
WHERE
    e.VALOR > (SELECT AVG(VALOR) FROM EMPRESTIMO);

Repare que ao apelidar CLIENTES como c e EMPRESTIMO como e, o código fica ainda mais seguro, explícito e fácil de ler por outros desenvolvedores.

Continue com esse excelente empenho nos estudos de banco de dados!

Espero que possa ter lhe ajudado!