Ir para conteúdo

POWERED BY:

Arquivado

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

Liurai

[Resolvido] Problema com GROUP, HAVING e SUBQUERY

Recommended Posts

CREATE TABLE IF NOT EXISTS `jogos` (
  `idJogo` bigint(20) NOT NULL AUTO_INCREMENT,
  `Data` datetime NOT NULL,
  `EquipaCasa` varchar(255) NOT NULL,
  `EquipaFora` varchar(255) NOT NULL,
  PRIMARY KEY (`idJogo`),
  KEY `idCompeticao` (`idCompeticao`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `eventos` (
  `idEvento` bigint(20) NOT NULL AUTO_INCREMENT,
  `Minuto` smallint(6) NOT NULL,
  `idTipoEvento` tinyint(4) NOT NULL,
  `idJogo` bigint(20) NOT NULL,
  PRIMARY KEY (`idEvento`),
  KEY `idJogo` (`idJogo`),
  KEY `idTipoEvento` (`idTipoEvento`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Oi

Estou com um problema que já dei muitas voltas e não consigo resolver numa única query

 

A tabela "jogos" guarda jogos de futebol de vários campeonatos. A estrutura que interessa está aí e tirei todos os campos que não interessam para este caso.

A tabela "eventos" guarda todos os eventos que ocorrem num jogo:

Minuto - O minuto a que o evento ocorreu

idTipoEvento - Foreign Key com a tabela de Tipos de Eventos, onde o idTipoEvento 1="Golo da Equipa Visitada", 2="Golo da Equipa Visitante" 3="Expulsão Equipa Visitada" 4="Expulsão Equipa Visitante"

idJogo - Foreign Key que liga com a tabela dos "jogos"

 

A query que preciso tem de contar por exemplo: "Quantidade de jogos onde o resultado aos 26 minutos estava 2-1"

Ou seja, o número de jogos em que antes do minuto 26 houve 2 eventos com idTipoEvento=1 e 1 evento com idTipoEvento=2.

 

Dei muitas voltas mas ainda não consegui. Parece-me que têm de existir algumas subqueries e alguns GROUP BY.

 

Alguma ajudinha era muito apreciada.

 

Obrigado http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de mais alguns testes, acabei por descobrir :D

 

Já agora para quem ficou curioso, resolvi assim

SELECT * FROM jogos WHERE 
   (SELECT COUNT(*) FROM eventos 
       WHERE jogos.idJogo=eventos.idJogo and idTipoEvento=1 and minuto<=26)=2 
   AND (SELECT COUNT(*) FROM eventos 
       WHERE jogos.idJogo=eventos.idJogo and idTipoEvento=2 and minuto<=26)=1

Afinal era mais simples do que estava a pensar ;)

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.