Muchas gracias huesos52, resuelve perfecto lo que necesito, por tratarse de fines académicos lo debo realizar con un cursor.
Ya he avanzado solo ahora tengo un error que se me repite la última linea en los resultados con otro estado.
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION estadoNotasRob()
RETURNS VARCHAR(2000)
AS $$
DECLARE
cursorNotas refcursor;
--todas las variables
id_alumno INTEGER;
nombre VARCHAR;
apellido VARCHAR;
descripcion_curso VARCHAR;
descripcion_asignatura VARCHAR;
nota_1 INTEGER;
nota_2 INTEGER;
nota_3 INTEGER;
promedio INTEGER;
BEGIN
OPEN cursorNotas FOR EXECUTE
('
select id_alumno, "nombre", "apellido", "curso", "asignatura", "nota_1", "nota_2", "nota_3", SUM((nota_1 + nota_2 + nota_3)/3) as promedio
from alumno
join nota on id_alumno = "ID_alumno"
join curso on id_curso = "ID_curso"
join asignatura on id_asignatura = "ID_asignatura"
group by id_alumno, "curso", "asignatura", "nota_1", "nota_2", "nota_3"
');
loop
fetch cursorNotas INTO id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
IF NOT found THEN
exit;
END IF;
IF((promedio)>=9) THEN
raise notice '%,%,%,%,%,%,%,%,%, Sobresaliente', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
END IF;
IF((promedio)>=7) THEN
raise notice '%,%,%,%,%,%,%,%,%, Muy bueno', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
END IF;
IF((promedio)<=6) THEN
raise notice '%,%,%,%,%,%,%,%,%, Regular', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
END IF;
END loop;
close cursorNotas;
RETURN 'Regular';
END;
$$
LANGUAGE 'plpgsql'
Este es el resultado.
select estadoNotasRob()
NOTICE: 1,jose,castro,(1,primero),(1,fisica),8,9,5,7, Muy bueno
NOTICE: 2,carla,ponce,(3,tercero),(2,matematicas),7,7,4,6, Regular
NOTICE: 3,julio,arias,(5,quinto),(1,fisica),8,8,8,8, Muy bueno
NOTICE: 4,roberto,martinez,(3,tercero),(5,literatura),6,6, 7,6, Regular
NOTICE: 5,emilio,garcia,(4,cuarto),(3,calculo),10,10,10,10 , Sobresaliente
NOTICE: 5,emilio,garcia,(4,cuarto),(3,calculo),10,10,10,10 , Muy bueno