Página 1 de 1

Uma pesquisa em sql puro

Enviado: 28 Jun 2010 21:14
por marcos.gurupi
Eu tenho um tabela por exemplo com a seguinte estrutura:

Nome_eq1 | Gol_eq1 | Nome_eq2 | Gol_eq2

Entaum eu quero percorrer essa tabela e saber quantas vezes aparece o nome
de uma equipe e quantos gols ele fez. Isso em codigo SQL! Alguem saberia fazer isso em codigo SQL?

Marcos Roberto.

Re: Uma pesquisa em sql puro

Enviado: 29 Jun 2010 10:30
por Toledo
Marcos, tenta o seguinte:

Código: Selecionar todos

SELECT Nome_ep1, sum(Gol_ep1) FROM nomedatabela GROUP BY Nome_ep1
Esta query vai retornar uma tabela com o nome da equipe e a soma dos gols.

Obs.: para retornar a soma dos gols da equipe 2 (Nome_ep2), troque os nomes dos campos.

Abraços,

Re: Uma pesquisa em sql puro

Enviado: 30 Jun 2010 18:03
por marcos.gurupi
Caro Toledo me ajuda no seguinte projeto. Estou querendo pegar em uma tabela por exemplo a selecao que mais fez pontos em seus grupos, ou seja, pegar o primeiro e o segundo do grupo A, primeiro e o segundo do grupo B e imprimir isso. Estou usando o codigo abaixo para imprimir a tabela com o seus pontos e grupos, estou tentando filtrar isso em uma variavel mas nao estou tento sucesso.

Código: Selecionar todos

SELECT ID,GRUPO,PAIS,
@J:=(SELECT COUNT(*) FROM jogos WHERE EQUIPE1 = ID OR EQUIPE2 = ID) JOGOS

,@V:=(SELECT COUNT(*) FROM jogos WHERE EQUIPE1 = ID AND GOLS_E1>GOLS_E2)
+(SELECT COUNT(*) FROM jogos WHERE EQUIPE2 = ID AND GOLS_E2>GOLS_E1) VITORIAS

,@D:=(SELECT COUNT(*) FROM jogos WHERE EQUIPE1 = ID AND GOLS_E1<GOLS_E2)
+(SELECT COUNT(*) FROM jogos WHERE EQUIPE2 = ID AND GOLS_E2<GOLS_E1) DERROTAS

,@E:=(@J-(@V+@D)) EMPATES

,@P:=((@V*3)+@E) PONTOS

,@GP:=((SELECT SUM(GOLS_E1) FROM jogos WHERE EQUIPE1 = ID)+(SELECT SUM(GOLS_E2) FROM jogos WHERE EQUIPE2 = ID)) GP

,@GC:=((SELECT SUM(GOLS_E2) FROM jogos WHERE EQUIPE1 = ID)+(SELECT SUM(GOLS_E1) FROM jogos WHERE EQUIPE2 = ID)) GC

,ROUND(@GP-@GC,0) SG,CONCAT(ROUND((@P/9)*100,1),'%') APROVEITAMENTO



,@1GA:= (SELECT MAX(PONTOS)FROM EQUIPES WHERE GRUPO='A')1GA  //AQUI ELE NAO DEVERIA IMPRIMIR SOMENTE AS EQUIPES COM MAIORES PONTOS DO GRUPO A ?
,@1GB:= (SELECT MAX(PONTOS)FROM EQUIPES WHERE GRUPO='B')1GB

FROM equipes ORDER BY GRUPO ASC,PONTOS DESC, SG DESC, VITORIAS DESC, GP DESC

Marcos Roberto.

Re: Uma pesquisa em sql puro

Enviado: 01 Jul 2010 15:57
por Toledo
Olá Marcos, estou com uma viagem marcada para hoje a noite e só retornarei no domingo, então agora não tem como fazer um exemplo para você. Mas me passe a estrutura das tabelas JOGOS e EQUIPES que na segunda eu lhe dou um retorno.

Só adiantando, você poderia usar o parâmetro LIMIT no comando abaixo, para pegar apenas os dois primeiros colocados:

Código: Selecionar todos

SELECT MAX(PONTOS)FROM EQUIPES WHERE GRUPO='A' LIMIT 2;
Abraços,

Re: Uma pesquisa em sql puro

Enviado: 01 Jul 2010 18:07
por JoséQuintas
Talvez ache esquisito eu falar isso, mas meu conhecimento SQL ainda é limitado.
Testaria estes:
SELECT SUM(TOTGOLS) FROM ( SELECT SUM(GOLS1) AS TOTGOLS FROM TABELA WHERE TIME1="OTIME"
UNION ALL
SELECT SUM(GOLS2) AS TOTGOLS FROM TABELA WHERE TIME2="OTIME" )
ou isto:
SELECT SUM( IIF(TIME1="OTIME",GOLS1,0) + IIF(TIME2="OTIME",GOLS2,0) ) AS TOTGOLS FROM TABELA
Ou ainda:
Ter um VIEW, e criar a pesquisa nesse VIEW, mas isto depende do banco de dados.
ou ainda:
O subselect do primeiro traz dois registros. Somar dois registros ainda seria aceitável.

Mas sabendo que é referente à copa, coisa de poucos registros, poderia até jogar para um Array, e trabalhar em memória.

Vi depois, é em ordem... então se aceitar subquery, seria algo mais neste estilo:

SELECT TIME, SUM(TOTGOLS) FROM ( SELECT TIME1 AS TIME, SUM(GOLS1) AS TOTGOLS FROM TABELA GROUP BY TIME1
UNION ALL
SELECT TIME2 AS TIME, SUM(GOLS2) AS TOTGOLS FROM TABELA GROUP BY TIME2 ) GROUP BY TIME ORDER BY TOTGOLS DESC