Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/11/2012, 14:43
arratete
 
Fecha de Ingreso: febrero-2012
Mensajes: 39
Antigüedad: 12 años, 2 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;