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

ERROR: more than one row returned by a subquery used as an expression

Estas en el tema de ERROR: more than one row returned by a subquery used as an expression en el foro de PostgreSQL en Foros del Web. Buenas Tardes, Estoy empezando con las Funciones SQL y no consigo solucionar este error. ERROR: more than one row returned by a subquery used as ...
  #1 (permalink)  
Antiguo 16/11/2012, 14:43
 
Fecha de Ingreso: febrero-2012
Mensajes: 39
Antigüedad: 12 años, 8 meses
Puntos: 0
ERROR: more than one row returned by a subquery used as an expression

Buenas Tardes,

Estoy empezando con las Funciones SQL y no consigo solucionar este error.

ERROR: more than one row returned by a subquery used as an expression

Quiero conseguir la edad media de los médicos que trabajan en la localidad pasada por parámetro. La tabla medico y trabaja están unidas por el atributo código. Entiendo que el error es porque me devuelve más de un valor para código, pero no sé como solucionarlo, ya que necesito los códigos de los diferentes médicos para luego calcular la media de edad.


Código:
CREATE OR REPLACE FUNCTION media_edades_medicos_centrosalud (text) RETURNS numeric AS $$
SELECT avg(edad_medico_cod(codigo)) FROM medico WHERE codigo=(SELECT codigo FROM trabaja WHERE localidad=$1);
$$ LANGUAGE SQL;

SELECT media_edades_medicos_centrosalud ('Donostia');

La función edad_medico_cod(codigo) a la que se hace referencia es:

Código:
CREATE OR REPLACE FUNCTION edad_medico_cod (integer) RETURNS integer AS $$
SELECT EXTRACT('year' FROM (SELECT AGE(fechanac) FROM medico WHERE codigo=$1))::integer
$$ LANGUAGE SQL;
  #2 (permalink)  
Antiguo 16/11/2012, 14:55
 
Fecha de Ingreso: febrero-2012
Mensajes: 39
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: ERROR: more than one row returned by a subquery used as an expression

Solucionado:

Código:
CREATE OR REPLACE FUNCTION media_edades_medicos_centrosalud (text) RETURNS numeric AS $$
SELECT avg(edad_medico_cod(codigo)) FROM medico INNER JOIN trabaja ON medico.codigo=trabaja.codmedico WHERE trabaja.localidad=$1;
$$ LANGUAGE SQL;

Etiquetas: as, expression, row, sql, subquery, tabla
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 08:51.