Uma pesquisa em sql puro

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Uma pesquisa em sql puro

Mensagem 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.
Marcos Roberto
NetService Software
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Uma pesquisa em sql puro

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Uma pesquisa em sql puro

Mensagem 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.
Marcos Roberto
NetService Software
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Uma pesquisa em sql puro

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Uma pesquisa em sql puro

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder