Calculando média

31/05/2017

0

Galera sou iniciante e gostaria de tirar uma duvida.
Cria um FUNCTION no MYSQL que me retornaria a média de um aluno.
Mas gostaria de saber como faço pra calcular todas as notas de todos os alunos e me retorna a maior nota.


DELIMITER //
CREATE FUNCTION media (nome VARCHAR(10))
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE n1,n2,n3,n4 INT;
DECLARE med FLOAT;
SELECT nota1,nota2,nota3,nota4 INTO n1,n2,n3,n4 FROM notas WHERE
aluno = nome;
SET med = (n1+n2+n3+n4)/4;
RETURN med;
END
//
DELIMITER ;
Francismax

Francismax

Responder

Post mais votado

31/05/2017

Bom dia Francismax!

Fiz esse exemplo no SQL Server. Estuda ele e adapta pro MySQL.

--Criando a tabela
CREATE TABLE notas
(
	aluno VARCHAR(50),
	nota1 DECIMAL(10,2),
	nota2 DECIMAL(10,2),
	nota3 DECIMAL(10,2),
	nota4 DECIMAL(10,2)
);

--Inserindo alguns registros
INSERT INTO notas (aluno, nota1, nota2, nota3, nota4) VALUES ('Daniel', 10, 9, 8, 7);
INSERT INTO notas (aluno, nota1, nota2, nota3, nota4) VALUES ('Marcos', 9, 8, 7, 6);
INSERT INTO notas (aluno, nota1, nota2, nota3, nota4) VALUES ('Tiago', 8, 7, 6, 5);
INSERT INTO notas (aluno, nota1, nota2, nota3, nota4) VALUES ('Gleydson', 7, 6, 5, 4);
INSERT INTO notas (aluno, nota1, nota2, nota3, nota4) VALUES ('Rafael', 6, 5, 4, 3);

--Criando a função
CREATE FUNCTION fn_media (@aluno VARCHAR(50))
RETURNS DECIMAL(10, 2)
AS
BEGIN
	DECLARE @media DECIMAL(10, 2);
	SET @media = (SELECT (nota1 + nota2 + nota3 + nota4) / 4 FROM notas WHERE aluno = @aluno);
	RETURN @media;
END;

--Calculando a média de todos os alunos
SELECT aluno,
       dbo.fn_media(aluno) AS Media
  FROM notas;

--Trazendo a maior média
SELECT aluno,
       dbo.fn_media(aluno)
  FROM notas
 WHERE dbo.fn_media(aluno) = (SELECT MAX(dbo.fn_media(n.aluno)) FROM notas n);


Se a resposta for útil não esqueça de dar um like!

Daniel Araújo

Daniel Araújo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar