Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Cursor que retorne un estado

Estas en el tema de Cursor que retorne un estado en el foro de PostgreSQL en Foros del Web. Hola tengo la siguiente duda. Realicé una consulta que me suma 3 notas y me da el promedio, n1----n2---n3----promedio -8----9-----5------7 -9----9-----9------9 Con este resutlado quiero ...
  #1 (permalink)  
Antiguo 08/02/2013, 10:52
 
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 5 años, 8 meses
Puntos: 0
Cursor que retorne un estado

Hola tengo la siguiente duda.

Realicé una consulta que me suma 3 notas y me da el promedio,

n1----n2---n3----promedio
-8----9-----5------7
-9----9-----9------9

Con este resutlado quiero realizar un cursor que realizace:


1) De la columna promedio si el resutado esta entre 10 y 9 retorne satisfactorio; 8 y 7 muy bueno y todo lo demás retorne regular.

Para presentar la tabla final:

n1----n2---n3----promedio-----estado
-8----9-----5------7-----------muy bueno
-9----9-----9------9-----------satisfactorio

Muchas gracias por la ayuda!

Adjunto consulta por si sirva de algo.

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"
  #2 (permalink)  
Antiguo 08/02/2013, 13:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.978
Antigüedad: 9 años, 8 meses
Puntos: 358
Respuesta: Cursor que retorne un estado

Código SQL:
Ver original
  1. SELECT
  2. id_alumno,
  3. "nombre",
  4. "apellido",
  5. "curso",
  6. "asignatura",
  7. "nota_1",
  8. "nota_2",
  9. "nota_3",
  10. promedio,
  11. CASE
  12. WHEN promedio BETWEEN 6 AND 7 THEN 'BUENO'
  13. WHEN promedio BETWEEN 8 AND 10 THEN 'MUY BUENO'
  14. ELSE 'POR MEJORAR'
  15. END nota
  16. FROM
  17. (
  18.     SELECT id_alumno, "nombre", "apellido", "curso", "asignatura", "nota_1", "nota_2", "nota_3", SUM((nota_1 + nota_2 + nota_3)/3) AS promedio 
  19.     FROM alumno
  20.     JOIN nota ON id_alumno = "ID_alumno"
  21.     JOIN curso ON id_curso = "ID_curso"
  22.     JOIN asignatura ON id_asignatura = "ID_asignatura"
  23.     GROUP BY id_alumno, "curso", "asignatura", "nota_1", "nota_2", "nota_3"
  24. ) AS t;

Así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/02/2013, 14:25
 
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 5 años, 8 meses
Puntos: 0
Respuesta: Cursor que retorne un estado

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 original
  1. CREATE OR REPLACE FUNCTION estadoNotasRob()
  2. RETURNS VARCHAR(2000)
  3. AS $$
  4.  
  5. DECLARE
  6.     cursorNotas refcursor;
  7.         --todas las variables
  8.         id_alumno INTEGER;
  9.         nombre VARCHAR;
  10.         apellido VARCHAR;
  11.         descripcion_curso VARCHAR;
  12.         descripcion_asignatura VARCHAR;
  13.         nota_1 INTEGER;
  14.         nota_2 INTEGER;
  15.         nota_3 INTEGER;
  16.         promedio INTEGER;
  17. BEGIN
  18.     OPEN cursorNotas FOR EXECUTE
  19.     ('
  20.     select id_alumno, "nombre", "apellido", "curso", "asignatura", "nota_1", "nota_2", "nota_3", SUM((nota_1 + nota_2 + nota_3)/3) as promedio
  21.     from alumno
  22.     join nota on id_alumno = "ID_alumno"
  23.     join curso on id_curso = "ID_curso"
  24.     join asignatura on id_asignatura = "ID_asignatura"
  25.     group by id_alumno, "curso", "asignatura", "nota_1", "nota_2", "nota_3"
  26.     ');
  27.    
  28.     loop
  29.         fetch cursorNotas INTO id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
  30.         IF NOT found THEN
  31.         exit;
  32.         END IF;
  33.         IF((promedio)>=9) THEN
  34.             raise notice '%,%,%,%,%,%,%,%,%, Sobresaliente', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
  35.         END IF;
  36.         IF((promedio)>=7) THEN
  37.             raise notice '%,%,%,%,%,%,%,%,%, Muy bueno', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
  38.         END IF;
  39.         IF((promedio)<=6) THEN
  40.             raise notice '%,%,%,%,%,%,%,%,%, Regular', id_alumno, nombre, apellido, descripcion_curso, descripcion_asignatura, nota_1, nota_2, nota_3, promedio;
  41.         END IF;
  42.        
  43.     END loop;
  44.     close cursorNotas;
  45.     RETURN 'Regular';
  46. END;
  47. $$
  48. 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

Etiquetas: as, cursor, estado, group, retorne
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.