Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Minha Solução

Olá, segue minha solução. Vocês podem corrigir, por gentileza? Nas questões 4 e 5 usei como o total de alunos da Tabela "Notas", pois estamos considerando apenas os alunos que têm notas, e não todos da Tabela "Alunos".


-- Consulta 1: Retorne todas as disciplinas

SELECT * FROM Disciplinas;

-- Consulta 2: Retorne os alunos que estão aprovados na disciplina de matemática

SELECT n.nota, a.Nome_Aluno
FROM Notas n 
JOIN Disciplinas d ON n.ID_Disciplina = d.ID_Disciplina
JOIN Alunos a ON n.ID_Aluno = a.ID_Aluno
WHERE nome_disciplina = 'Matemática' AND Nota > 6.0;

-- Consulta 3: Identificar o total de disciplinas por turma

SELECT t.ID_Turma, t.Nome_Turma, COUNT(td.ID_Disciplina) AS Qtd_Disciplinas, d.Nome_Disciplina
FROM Turmas t
JOIN Turma_Disciplinas td ON t.ID_Turma = td.ID_Turma
JOIN Disciplinas d ON td.ID_Disciplina = d.ID_Disciplina
GROUP BY t.ID_Turma

-- Consulta 4: Porcentagem dos alunos que estão aprovados

WITH Qtd_Alunos_Aprovados AS (
  SELECT COUNT(ID_Aluno) AS qtd_aprovados
  FROM (
    SELECT ID_Aluno, ROUND(AVG(Nota), 2) AS Media
    FROM Notas
    GROUP BY ID_Aluno
    HAVING Media >= 6.0
  )
), Qtd_Alunos AS (
SELECT COUNT(*) AS qtd_alunos
FROM (SELECT DISTINCT ID_Aluno FROM Notas)
)
SELECT ap.qtd_aprovados AS Alunos_Aprovados,
qtda.qtd_alunos AS Total_Alunos,
ROUND(100.0*ap.qtd_aprovados/qtda.qtd_alunos, 2) || '%' AS Porcentagem
FROM Qtd_Alunos_Aprovados ap, Qtd_Alunos qtda
;

-- Consulta 5: Porcentagem dos alunos que estão aprovados por disciplina

WITH Qtd_Alunos_Aprovados_Por_Disciplina AS (
  SELECT COUNT(ID_Aluno) AS qtd_aprovados
  FROM (
    SELECT ID_Aluno, ID_Disciplina, ROUND(AVG(Nota), 2) AS Media
    FROM Notas
    GROUP BY ID_Aluno, ID_Disciplina
    HAVING Media >= 6.0
  )
), Qtd_Alunos_Notas AS (
  SELECT COUNT(*) AS alunos_totais FROM (SELECT DISTINCT ID_Aluno, ID_Disciplina FROM Notas)
)
SELECT qaapd.qtd_aprovados AS Alunos_Aprovados,
qan.alunos_totais as Alunos_Totais,
ROUND(100.0 * qaapd.qtd_aprovados / qan.alunos_totais, 2) || '%' as Porcentagem 
FROM Qtd_Alunos_Aprovados_Por_Disciplina qaapd, Qtd_Alunos_Notas qan
;
2 respostas

Olá Luís, tudo bem?

Fico feliz que esteja empenhado em realizar as atividades.

Notei no exercício 4, você calcula a porcentagem de alunos cuja média das notas é maior ou igual a 6.0, média >= 6.0, para calcular a porcentagem de alunos que possuem qualquer nota maior ou igual a 6.0, você pode fazer:

WITH Qtd_Alunos_Aprovados AS (
  SELECT COUNT(DISTINCT ID_Aluno) AS qtd_aprovados
  FROM Notas
  WHERE Nota >= 6.0
), Qtd_Alunos AS (
  SELECT COUNT(DISTINCT ID_Aluno) AS qtd_alunos
  FROM Notas
)
SELECT ap.qtd_aprovados AS Alunos_Aprovados,
       qtda.qtd_alunos AS Total_Alunos,
       ROUND(100.0 * ap.qtd_aprovados / qtda.qtd_alunos, 2) || '%' AS Porcentagem
FROM Qtd_Alunos_Aprovados ap, Qtd_Alunos qtda;

No mais suas consultas estão certinhas, parabéns! Continue com essa dedicação que você vai longe!

Espero ter ajudado e bons estudos!

solução!

Oi Monalisa, muito obrigado pelo resposta. Mas fui testar sua solução da Questão 4, e num primeiro momento gostei porque a sintaxe está bem mais simples, mas ao testá-la vi que tem alguma coisa estranha com o retorno:

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

E então percebi que talvez haja uma imprecisão na consulta. A primeira consulta "Qtd_Alunos_Aprovados" está retornando os alunos que possuem alguma nota acima de 6.0, e não os que possuem a média superior a 6.0. Por isso que a consulta está retornando 10, porque todos os alunos possuem alguma nota acima de 6.0, não é isso? Por isso que fiz o agrupamento e o cálculo da média, para calcular uma média geral das notas de cada aluno. Mas como ficaria isso com essa sintaxe mais simplificada? Agora a segunda consulta "Qtd_Alunos" acho que está tudo certinho, porque calcula o número total distinto de alunos de "Notas". Aliás, adorei a sintaxe COUNT(DISTINCT ID_Aluno), não sabia que dava pra fazer, achei bem interessante porque não precisa fazer uma subconsulta só com o DISTINCT. Me corrija por favor se estiver errado! Ah, e também vou usar essa notação COUNT(DISTINCT ID_Aluno) na questão 5 pra calcular o total de alunos, obrigado!