View Full Version : Completar consultas em mysql


moriva
17-06-2008, 19:19
Tenho esta tabela na minha base de dados:

CREATE TABLE IF NOT EXISTS `andebol` (
`Cod_Jogo` bigint(20) NOT NULL auto_increment,
`Tipo` varchar(20) NOT NULL default '',
`Data` date NOT NULL default '0000-00-00',
`Hora` time NOT NULL default '00:00:00',
`Local` varchar(20) NOT NULL default '',
`Equipa1` varchar(50) NOT NULL default '',
`Equipa2` varchar(50) NOT NULL default '',
`Periodo1Equipa1` int(50) NOT NULL default '0',
`Periodo1Equipa2` int(50) NOT NULL default '0',
`Periodo2Equipa1` int(50) NOT NULL default '0',
`Periodo2Equipa2` int(50) NOT NULL default '0',
`FinalEquipa1` int(50) NOT NULL default '0',
`FinalEquipa2` int(50) NOT NULL default '0',
PRIMARY KEY (`Cod_Jogo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
1º-Eu queria que mostrasse o nome de cada equipa apenas uma vez caso a equipa esteja em mais de que um registo.Mas isso ja esta feito com o código desta consulta:


SELECT Equipa
FROM (
SELECT Equipa1 AS Equipa
FROM andebol
UNION ALL
SELECT Equipa2 AS Equipa
FROM andebol
) AS U
GROUP BY Equipa;
2º- O mais dificil é colocar a frente de cada equipa o numero de golos marcados e o numero de vitórias.

Dica: Para perceberem melhor aconselho-vos a criar a tabela "andebol" no mysql ou phpmyadmin e a colocares alguns registos e experimentares a consulta acima.

Estou a muito tempo a volta deste problema. Agradecia muito se me ajudassem.

:p

HLopes
17-06-2008, 19:24
Não estou a perceber... Queres fazer isso em SQL puro?

samahong
18-06-2008, 01:22
Não discutindo a tua modelação dos dados, será que isto devolve o que pretendes (acrescentei os golos sofridos e as derrotas)?

SELECT
Equipa,
sum(golos_marcados) AS golos_marcados,
sum(golos_sofridos) AS golos_sofridos,
sum(vitoria) AS n_vitorias,
sum(derrota) AS n_derrotas

FROM
(
SELECT
Equipa1 AS Equipa, FinalEquipa1 AS golos_marcados,
FinalEquipa2 AS golos_sofridos,
CASE WHEN FinalEquipa1 > FinalEquipa2 THEN 1 ELSE 0 END AS vitoria,
CASE WHEN FinalEquipa1 < FinalEquipa2 THEN 1 ELSE 0 END AS derrota
FROM
andebol

UNION ALL

SELECT
Equipa2 AS Equipa, FinalEquipa2 AS golos_marcados,
FinalEquipa1 AS golos_sofridos,
CASE WHEN FinalEquipa2 > FinalEquipa1 THEN 1 ELSE 0 END AS vitoria,
CASE WHEN FinalEquipa2 < FinalEquipa1 THEN 1 ELSE 0 END AS derrota
FROM
andebol
) AS U
GROUP BY
Equipa

moriva
18-06-2008, 11:32
Era mesmo isso que eu pretendia. O nome das equipas e o numero de golos marcados e vitorias.

E ainda acrescentaram o numero de derrotas e de golos sofridos. EXCELENTE!!!!

Andava as voltas com este problema a muito tempo.Obrigado.:p:p:p:p:p:p:p:p