Media de valores entre tabelas mysql [RESOLVIDO]

1. Media de valores entre tabelas mysql [RESOLVIDO]

Manassés nascimento de sousa
manasses_sousa

(usa Debian)

Enviado em 14/04/2012 - 16:05h

Salve galera, eu estou com uma duvida em relação ao sql e gostaria da ajuda de voces com este problema, o caso é o seguinte, eu tenho um banco de dados com duas tabelas, o nome do banco é prova e as 2 tabelas são prova_esp e prova_red, na tabela prova_esp tem os campos id, nome, nota e na prova_red tem apenas id e nota, eu estou tentando gerar um código SQL no mysql que levando em consideração que os campos id das duas tabelas tem os mesmos valores mudando apenas os valores 'nota', eu quero fazer um select que me traga o id e a média das 2 notas exemplo:
----Prova_esp--------------prova_red
|--id--|--nota--|----- |---id--|--nota-|
| 1234 | 50,50 |----- | 1234 | 60,00 |
| 6789 | 70,00 |----- | 6789 | 65,00 |

a saida deveria vim da seguinte forma:
----saida------
|--id--|--nota-|
| 1234 | 55,25 |
| 6789 | 67,50 |

na saida deveria conter a média das 2 notas para cada id da tabela ordenado pela nota, o mais proximo que cheguei foi o seguinte código:

SELECT * FROM `prova`.`prova_esp`,`prova`.`prova_red`
WHERE prova_esp.id = prova_red.id

só que desta forma ele me tras todos os campos inclusive os 2 campos nota, tentei usar o AVG mas da forma como coloquei, ele me tras a media ta tabela inteira e não de cada registro como eu quero se alguem puder me ajudar ae eu agradeço, vlw galera...


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/04/2012 - 18:59h

Um pouco mais otimizado:


SELECT id, AVG(nota)
FROM (
SELECT id, AVG(nota) AS nota FROM Prova_esp GROUP BY id
UNION
SELECT id, AVG(nota) AS nota FROM Prova_red GROUP BY id
) tabelas
GROUP BY id


3. Re: Media de valores entre tabelas mysql [RESOLVIDO]

Manassés nascimento de sousa
manasses_sousa

(usa Debian)

Enviado em 14/04/2012 - 16:39h

Dae galera, o seguinte, com a query abaixo eu consegui mostrar o nome dos usuarios e os 2 campos nota, só ta faltando o encaixe do AVG ou DISTINCT mas não sei exatamente como fazer, se alguem souber posta ae por favor....

SELECT `prova_esp`.`nome`, `prova_esp`.`nota`, `prova_red`.`nota`
FROM prova_esp, prova_red
where prova_esp.id = prova_red.id
ORDER BY `prova_esp`.`nome` ASC


4. Re: Media de valores entre tabelas mysql [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/04/2012 - 18:56h

Uma forma de fazer:


SELECT id, AVG(nota)
FROM (
SELECT id, nota FROM Prova_esp
UNION
SELECT id, nota FROM Prova_red
) tabelas
GROUP BY id



5. Re: Media de valores entre tabelas mysql [RESOLVIDO]

Manassés nascimento de sousa
manasses_sousa

(usa Debian)

Enviado em 14/04/2012 - 19:05h

Vlw, deu certinho o comando aqui, vou marcar como resolvido mas queria ver se você pode postar essa query comentada só pra que eu a entenda melhor... vlw velhinho, obrigado pela ajuda...


6. Re: Media de valores entre tabelas mysql [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/04/2012 - 19:13h

Não tem mistério:

Primeiro eu transformo as duas tabelas em uma só, com o comando UNION.

SELECT id, nota FROM Prova_esp
UNION
SELECT id, nota FROM Prova_red

A estrutura fica assim:

| 1234 | 50,50 | ==> Prova_esp
| 6789 | 70,00 | ==> Prova_esp
| 1234 | 60,00 | ==> Prova_red
| 6789 | 65,00 | ==> Prova_red

Depois disso é só fazer a média com o AVG agrupando pelo id.


7. Re: Media de valores entre tabelas mysql [RESOLVIDO]

Manassés nascimento de sousa
manasses_sousa

(usa Debian)

Enviado em 14/04/2012 - 19:17h

Muito show, eu vou continuar estudando sql, vlw pela dica...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts