Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabriBh

[Resolvido] Media entre com dados de duas tabelas

Recommended Posts

Olá tarde a todos...

 

Preciso gerar um relatório, porém neste relatório irei reunir dados de diferentes tabelas do banco de dados(MySql), para ser mais especifico, duas tabelas, já possuo as query´s funcionando perfeitamente!

 

Na tabelaA, recebo da minha query uma lista de cidades e um numero de armadilhas ativas que cada cidade possui.

Na tabelaB, recebo da minha query uma lista de cidades que tiveram armadilhas vistoriadas e a soma das vistorias, lembrando que pode faltar cidade nessa lista, se ela não tiver nenhuma vistoria na data especifica.

 

Sendo assim, com base nessas informações, preciso realizar a média de execução por cidade.

 

As query´s que possuo, eu tenho que fazer um trabalho manual, gerar duas tabelas e depois calcular a media de execução de vistorias na mão.

 

Caso alguém possa me ajudar.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi bem mas tente montar duas tabela virtuais com as queries que tem hoje

SELECT *
FROM
(SELECT CIDADE,ARMADILHAS
FROM TABELA1) VIRTUAL1
(SELECT CIDADE,SUM(VISTORIAS) VISTORIAS
FROM TABELA2)
WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE

 

A partir deste ponto é só montar o agrupamento requerido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi bem mas tente montar duas tabela virtuais com as queries que tem hoje

SELECT *
FROM
(SELECT CIDADE,ARMADILHAS
FROM TABELA1) VIRTUAL1
(SELECT CIDADE,SUM(VISTORIAS) VISTORIAS
FROM TABELA2)
WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE

 

A partir deste ponto é só montar o agrupamento requerido.

 

 

Bom vou colocar aqui as query´s para que você entendam melhor, os nome das tabelas e dos campos são fictício, mas dá para ilustrar muito bem.

 

//query que conta a quantidade de armadilhas cadastradas, onde situac = 1, representa as armadilhas ativas.
SELECT C.CIDADE, COUNT(A.SITUAC) as TOTAL_DE_ARMADILHAS FROM TBA A INNER JOIN TBC C ON(A.COD = C.COD) 
WHERE C.TIPO = 'SESMG' AND A.SITUAC = 1 GROUP BY C.NOM_CLIENTE

//query para contar quantas armadilhas foram vistoriadas
SELECT C.CIDADE, COUNT(V.NUM_ARMAD) as VISTORIA FROM TBVIS V INNER JOIN TBCLI C ON(V.COD = C.COD) 
WHERE C.TIPO = 'SESMG' AND V.DT_VIS = '2011-04-06' GROUP BY C.NOM_CLIENTE

 

Sendo assim, para cada query, eu necessito juntar dados de duas tabelas, onde o resultado da primeiro query será assim:

 

Cidades Armadilhas

AGUAS FORMOSAS 80

ARAGUARI 349

BOM DESPACHO 126

CONSELHEIRO LAFAIETE 266

CORONEL FABRICIANO 218

CURVELO 210

GOVERNADOR VALADARES 425

IPATINGA 512

ITABIRA 259

JANAUBA 171

JOAO MONLEVADE 217

LAVRAS 245

MALACACHETA 77

MANHUACU 115

PADRE PARAISO 81

PARACATU 192

PIRAPORA 199

PONTE NOVA 106

SETE LAGOAS 497

TEOFILO OTONI 265

VISCONDE DO RIO BRANCO 81

 

E o resultado da segunda query que conta quantas armadilhas foram vistoriadas, traz um resultado igual a esse, porém nem sempre aparece todas as cidades, porque as vezes naquele dia, não houve vistorias.

 

Dá tenho que fazer a média, dividir o numero de vistorias, pelo numero de armadilhas para saber a % de armadilhas vistoriadas, queria montar uma query para realizar todo esse processo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT VIRTUAL2.CIDADE,AVG(VIRTUAL2.VISTORIA)
FROM
(
SELECT C.CIDADE, COUNT(A.SITUAC) as TOTAL_DE_ARMADILHAS FROM TBA A INNER JOIN TBC C ON(A.COD = C.COD) 
WHERE C.TIPO = 'SESMG' AND A.SITUAC = 1 GROUP BY C.NOM_CLIENTE
) VIRTUAL1,
(
SELECT C.CIDADE, COUNT(V.NUM_ARMAD) as VISTORIA FROM TBVIS V INNER JOIN TBCLI C ON(V.COD = C.COD) 
WHERE C.TIPO = 'SESMG' AND V.DT_VIS = '2011-04-06' GROUP BY C.NOM_CLIENTE
) VIRTUAL2
WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE
GROUP BY VIRTUAL2.CIDADE

 

Creio ser isto, talvez falte algum refinamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu galera, mas já consegui resolver, fiz via programação mesmo, ficou mais fácil, nada como uma boa analise do problema para que se encontre a melhor solução, agradeço pela respostas dadas...

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.