Várias consultas de uma só vez

20/09/2004

Pessoal,

Estou usando o Oracle 9 e gostaria de saber como faço para ao invés de criar várias consultas separadas criar uma única onde me retorne todos os resultados que necessito.
Exemplo: (tentei dessa forma e não deu certo)
Select U.CodUsuario, U.NomeUsuario,
(Select Sum(Emitidos) from RelatoriosEmitidos X on X.CodUsuario=U.CodUsuario) as
Emitidos,
(Select Sum(Avaliados) from RelatoriosAvaliados X on X.CodUsuario=U.CodUsuario)
as Avaliados,
(Select AVG(Avaliados) from RelatoriosAvaliadosX on X.CodUsuario=U.CodUsuario)
as MediaAvaliados
from Usuarios U

Como resposta preciso ter nome do usuário, soma dos relatórios emitidos, soma dos relatórios avaliados e a média dos relatórios avaliados. Sendo que essa média deve ser a soma de três colunas da tabela dividido por 3. Se colocar AVG(Campo1), AVG(Campo2, AVG(Campo3) vou ter a média de cada coluna, mas tenho que depois somar as três e dividir por 3. Como posso fazer essa média direto na query via SQL?

Obrigada


Barbara.michele

Respostas

20/09/2004

Djjunior

não testei mais deve funcionar

Select U.CodUsuario, U.NomeUsuario, A.sumEmitido, B.SumAvaliados, C.AVGAvaliados
from Usuarios U,
(Select Sum(Emitidos) as SumEmitido from RelatoriosEmitidos) A,
(Select Sum(Avaliados) as SumAvaliados from RelatoriosAvaliados) B,
(Select AVG(Avaliados) as AVGAvaliados from RelatoriosAvaliados) C


Responder Citar

20/09/2004

Barbara.michele

Oi! Fiz como você falou, mas não está funcionando, está dando erro!!!


Responder Citar

20/09/2004

Djjunior

qual a msg ?


Responder Citar

20/09/2004

Barbara.michele

Coloquei só essa parte para testar:

select distinct USUARIO, A.EMITIDO
from sac
where uf = ´RJ´,
(SELECT COUNT(USUARIO) AS EMITIDO FROM SAC WHERE USUARIO = ´123´)

No final da linha where uf = ´RJ´, está exibindo o erro: ORA-00933: comando SQL não encerrado adequadamente.


Responder Citar

21/09/2004

Djjunior

faça
select distinct USUARIO, A.EMITIDO
from sac
where uf = ´RJ´ [b:670ae3036f]and[/b:670ae3036f]
(SELECT COUNT(USUARIO) AS EMITIDO FROM SAC WHERE USUARIO = ´123´)

ai não dá erro, mas a consulta continua errada :x , pois não há nada que relacione as duas consultas, portanto está gerando um result set do tipo produto carteziano. Ou vc relaciona as duas ou ambas tem os mesmos critérios.

o certo seria algo do tipo

select distinct S.USUARIO, A.EMITIDO
from sac S, (SELECT USUARIO, COUNT(EMITIDO) AS EMITIDO FROM SAC WHERE USUARIO = ´123´ group by USUARIO) A
where s.USUARIO = a.USUARIO


Responder Citar