1
resposta

[Projeto] Resolução de Projeto

Abaixo algumas aplicações do aprendizado em aula para resolução dos problemas

-- Consulta 1: Retorne todas as disciplinas (Restringi para apenas nome e descrição, pois são as informações relevantes para o retorno pedido)
SELECT 
    Nome_Disciplina,
    Descricao
FROM
    Disciplinas d;

-- Consulta 2: Retorne os alunos que estão aprovados na disciplina de matemática (Considerando corte de nota em 7)
SELECT 
    a.Nome_Aluno,
    d.Nome_Disciplina, -- Validação
    n.Nota,
    CASE 
        WHEN Nota >= 7 THEN 'Aprovado'
        ELSE 'Reprovado'
    END AS Situacao
FROM
    Alunos a
INNER JOIN
    Notas n ON n.ID_Aluno = a.ID_Aluno
INNER JOIN 
    Disciplinas d ON d.ID_Disciplina = n.ID_Disciplina
WHERE 
    Situacao = "Aprovado"
    AND d.Nome_Disciplina = "Matemática";

-- Consulta 3: Identificar o total de disciplinas por turma
SELECT 
    t.Nome_Turma,
    COUNT(td.ID_Disciplina) as Disciplinas 
FROM
    Turma_Disciplinas td 
INNER JOIN 
    Turmas t ON t.ID_Turma = td.ID_Turma
GROUP BY
    t.Nome_Turma;

-- Consulta 4: Porcentagem dos alunos que estão aprovados (Utilizando WITH aproveitando uma tabela montada anteriormente para gerar situação da nota)
WITH Indice AS (
    SELECT 
        a.ID_Aluno AS ID,
        a.Nome_Aluno AS Nome_Aluno,
        n.Nota AS Nota,
        CASE 
            WHEN Nota >= 7 THEN 'Aprovado'
            ELSE 'Reprovado'
        END AS Situacao
    FROM
        Alunos a
    INNER JOIN
        Notas n ON n.ID_Aluno = a.ID_Aluno
    INNER JOIN 
        Disciplinas d ON d.ID_Disciplina = n.ID_Disciplina),
Totais AS (
    SELECT 
        COUNT(*) AS Total_Notas
    FROM 
        Notas)
SELECT 
    t.Total_Notas,
    COUNT(i.ID) AS Aprovados,
    ROUND((COUNT(i.ID) * 100.0 / t.Total_Notas), 2) || "%" AS Porcentagem
FROM
    Indice i,
    Totais t
WHERE 
    i.Situacao = 'Aprovado';

-- Consulta 5: Porcentagem dos alunos que estão aprovados por disciplina
SELECT 
    d.Nome_Disciplina AS Disciplina,
    COUNT(*) AS Total_Alunos,
    SUM(CASE 
        WHEN n.Nota >= 7 THEN 1
        ELSE 0
    END) AS Aprovados,
    ROUND(SUM(CASE
        WHEN n.Nota >= 7 THEN 1
        ELSE 0
    END) * 100.0 / COUNT(*), 2) || '%' AS Indice_Aprovados
FROM
    Alunos a 
INNER JOIN
    Notas n ON n.ID_Aluno = a.ID_Aluno 
INNER JOIN
    Disciplinas d ON d.ID_Disciplina = n.ID_Disciplina 
GROUP BY 
    Disciplina;
1 resposta

Bom dia, Gabriel! Como vai?

Obrigado por compartilhar sua solução com a comunidade Alura. Como relembrar é manter vivo na memória, deixo abaixo uma tabela com um resumo dos principais funções que você utilizou no código:

ComandoDescrição
SELECTDefine as colunas a serem retornadas pela consulta.
INNER JOINRealiza a junção entre tabelas, retornando apenas os registros que têm correspondência em ambas.
GROUP BYAgrupa os resultados com base em uma ou mais colunas, permitindo cálculos agregados como COUNT ou SUM.
WITHCria consultas temporárias (CTEs) para simplificar cálculos e estruturar queries mais legíveis.
ROUND()Arredonda valores numéricos para um número específico de casas decimais, como no cálculo de porcentagens.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!