Comparar e contar registos de tabela mysql

xina12

Power Member
Olá boa tarde.

tenho a seguinte tabela em mysql que guarda resultados de jogos de futebol:

id, equipa1, equipa2, marc_1, marc_2, jornada, liga, data;

Estou a montar uma tabela de classificação. Ai eu preciso saber quantas vitórias cada equipa tem.


Por exemplo quero saber quantos jogos o porto ganhou em casa, algo assim:

"SELECT * FROM tabela HAVING COUNT(marc_1)> (marc_2) WHERE equipa1 LIKE 'porto'"

Alguém tem uma dica de como conseguir contar todas as vezes em que uma tabela é superior à outra?

Agradeço antecipadamente
 
Assim rapidamente, consegues fazer isso com subconsultas (pelo menos), tendo em conta que existem versoes do mysql que nao suportam subconsultas, e uma questao de procurares.


@nfk, ele quer fazer uma contagem de todas as vitorias.
 
Ok, não me lembrei dessa parte da contagem, mas então e:

SELECT COUNT(*) FROM tabela WHERE equipa1 LIKE 'porto' and marc1>marc2;

Agora tens a questao de ligas, o Porto nao tem varias? E dado que e uma tabela de classificacao complica mais.


Tem de ser dentro de uma liga.
Fazer contagem de vitorias.
Ordenar por Vitorias e mostrar nome - vitorias.

Ainda existe a questao dos empates...


Xina12, Outra coisa vais ter imensa redundancia e problemas, essa tabela assim e' terrivel.


Mostra um exemplo de tabela preenchida, com diferentes jornadas, datas, ligas,ids e equipas semelhantes Porto, Benfica, Sporting e com equipas da 2a liga Porto, Benfica, Sporting (nao vejo futebol nao sei muit bem o que existe)
 
Agora tens a questao de ligas, o Porto nao tem varias? E dado que e uma tabela de classificacao complica mais.


Tem de ser dentro de uma liga.
Fazer contagem de vitorias.
Ordenar por Vitorias e mostrar nome - vitorias.

Ainda existe a questao dos empates...


Xina12, Outra coisa vais ter imensa redundancia e problemas, essa tabela assim e' terrivel.

Não, o Porto só está numa liga, quanto muito tens o "Porto B". De qualquer maneira isso não é importante, podia-se usar um identificador único em vez do nome, e se houver ligas e épocas diferentes tem-se de acrescentar isso à query. Não percebi o que querias dizer com "Fazer contagem de vitorias", porque isso é o que esta query já faz. Os empates seriam fáceis, marc1 é igual a marc2.

Em relação à eficiência, eu só respondi à pergunta direta "quero saber quantos jogos o porto ganhou em casa". Não duvido que hajam maneiras mais eficientes de fazer isto, porque vão-se estar a repetir as mesmas perguntas à base de dados (a mesma query que nos diz que o Porto ganhou em casa ao Benfica já nos podia estar a dizer que o Benfica perdeu fora com o Porto). Também se pode fazer logo a query marc1 > marc2 e agrupar por equipa, para não ter de fazer a query para cada equipa.
 
Primeiro, muito obrigado a todos, vou agora testar as sugestões.
A questão da liga não é problema. a liga para já, é apenas "1pt" primeira liga portuguesa.
Eu perguntei como saberia os jogos em casa pk depois é só fazer uma pesquisa igual mas para as vitórias fora e somar, assim tenho o total de vitórias.

já agora, nunca ouvi falar de subquerys, alguém me poderia ilucidar sobre isso sff? tenho a noção de que me resolveria alguns dos desafios que ainda tenho pela frente.

Obrigado uma vez mais.
 
Acho que pelo futuro tens de aprender sobre "tables normalization SQL" e subquerys. Nunca lidei com webistes com alguma escala, mas assim podes vir a ter problemas de performance, atomicidade e redundancia. Em portugues sao subconsultas, resumidamente uma consulta dentro de uma consulta (query) e normalizacao de tabelas.
 
Eu começaria por ver quão fácil é fazer as queries simples para ter o resultado que queres. Não estou a ver em que é que as subqueries iriam ajudar, mas se o h9nrik der um exemplo talvez se torne mais claro.

A tua tabela parece estar normalizada, neste momento. Seria mais fácil fazer certas queries desnormalizando (e.g, guardar vitórias, empates e derrotas), mas isso levantaria problemas de integridade da base de dados.

EDIT: Acho que já percebi a ideia do h9nrik. Para manter a base de dados normalizada, será útil teres tabelas auxiliares com a liga de cada clube, temporada, etc, e aí as subqueries podem ser usadas para restringir os resultados aos grupos de equipas que queiras. Normalmente eu penso mais em termos de JOINs do que em subqueries.
 
Última edição:
Back
Topo