Query

Hola,
Tengo unas querys pequeñas (6) que necesito unificar en una única query. Todas ellas obtienen un par de ids (los mismos en todos los casos: idusuario, idcurso) y un valor calculado (distinto en cada una de las querys: ScoTrabajos, ScoExamenes, ScoAF, PasTrabajos, PasExamenes, PasAF). Mi intención es obtener en cada uno de los registros: idusuario, idcurso, Sco(media de ScoTrabajos, ScoExamenes y ScoAF) y Pas (media de PasTrabajos, PasExamenes, PasAF). Mi problema es el siguiente: como las subquerys obtienen sus datos de tablas distintas, es posible que no existan registros con los identificadores (idusuario, idcurso) en todos los casos. Inner/left/right join no me sirven, ya que necesito que me devuelva los no duplicados en todos los casos (tanto las selects de la derecha como las de la izquierda del inner). Si hago una union me devuelve un registro nuevo para cada caso (y yo lo que quiero es que estén todos los valores en un único registro y calcularles la media!)... No se como solucionarlo ni si tiene solución.
Gracias por tu paciencia y ayuda

1 respuesta

Respuesta
1
Prueba con esta solución:
select idusuario, idcurso, avg(sco), avg(pas)
From ( select idusuario, idcurso, Scotrabajos sco, to_number(null) pas
from tabla1
union all
select idusuario, idcurso, ScoExamenes sco, to_number(null) pas
from tabla2
union all
select idusuario, idcurso, ScoAf sco, to_number(null) pas
from tabla3
union all
SELECT idusuario,idcurso,to_number(null) sco,Pastrabajos pas
FROM tabla4
union all
SELECT idusuario,idcurso,to_number(null) sco,PasExamenes pas
FROM tabla5
union all
SELECT idusuario,idcurso,to_number(null) sco,PasAf pas
FROM tabla6 )
group by idusuario,idcurso;
Es exactamente la construcción que estaba intentando, pero no acababa de ver como montarla. Ha funcionado a la primera :) . MUCHÍSIMAS GRACIAS!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas