ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Criar uma consulta SQL (Resolvido)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Qui Set 20, 2018 11:27 am    Assunto: Criar uma consulta SQL (Resolvido) Responder com Citação

Pessoal estou precisando de ajuda para criar uma consulta sql.

Já tenho todos os concursos realizados da lotofacil em uma tabela como também tenho todas as combinações possíveis da lotofácil em outra tabela.

Tabela concursosrealizados - Concursos já realizados da lotofácil (até o momento foram 1.713)

Código:

|concurso|data      |b1|b2|b3|b4|b5|b6|b7|b8|b9|b10|b11|b12|b13|b14|b15|
|       1|29/09/2003|18|20|25|23|10|11|24|14|06|02 |13 |09 |05 |16 |03 |
|       2|06/10/2003|23|15|05|04|12|16|20|06|11|19 |24 |01 |09 |13 |07 |
...


Tabela jogospossiveis - Todos os jogos possíveis da lotofácil são 3.268.760

Código:

|jogo|b1|b2|b3|b4|b5|b6|b7|b8|b9|b10|b11|b12|b13|b14|b15|
|   1|01|02|03|04|05|06|07|08|09|10 |11 |12 |13 |14 |15 |
|   2|01|02|03|04|05|06|07|08|09|10 |11 |12 |13 |14 |16 |
|   3|01|02|03|04|05|06|07|08|09|10 |11 |12 |13 |14 |17 |
...


Desejo criar uma consulta sql que pegue o jogo 1 da tabela "jogospossiveis" e compare com todos os jogos da tabela "concursosrealizados" e assim sucessivamente e depois apresente o resultado abaixo:

Código:

|jogo|11pontos|12pontos|13pontos|14pontos|15pontos|
|   1|140     |29      |3       |0       |0       |
...


Não tenho a mínima ideia de como criar esta consulta sql.

Obrigado.


Editado pela última vez por Ranyery em Sáb Set 22, 2018 10:39 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 20, 2018 2:29 pm    Assunto: Responder com Citação

Boa tarde,

Qual banco de dados (e versão) você está utilizando?


Editado pela última vez por imex em Sáb Set 30, 2023 5:43 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Qui Set 20, 2018 4:49 pm    Assunto: Responder com Citação

Estou usando Turbo Delphi e banco de dados access (.mdb), pretendo fazer a consulta utilizando adoquery.

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 20, 2018 5:23 pm    Assunto: Responder com Citação

Não tenho nenhuma experiência com o Access, mas experimente fazer uns testes com a query abaixo:

Código:
select
    Jogo,
   QtdPontos,
   count(*) as QtdConcursos
from
(   
   select
      j.Jogo,
      c.Concurso,
      count(*) as QtdPontos
   from
   (
      select Jogo, b1 as Dezena from JogosPossiveis
      union all
      select Jogo, b2 as Dezena from JogosPossiveis
      union all
      select Jogo, b3 as Dezena from JogosPossiveis
      union all
      select Jogo, b4 as Dezena from JogosPossiveis
      union all
      select Jogo, b5 as Dezena from JogosPossiveis
      union all
      select Jogo, b6 as Dezena from JogosPossiveis
      union all
      select Jogo, b7 as Dezena from JogosPossiveis
      union all
      select Jogo, b8 as Dezena from JogosPossiveis
      union all
      select Jogo, b9 as Dezena from JogosPossiveis
      union all
      select Jogo, b10 as Dezena from JogosPossiveis
      union all
      select Jogo, b11 as Dezena from JogosPossiveis
      union all
      select Jogo, b12 as Dezena from JogosPossiveis
      union all
      select Jogo, b13 as Dezena from JogosPossiveis
      union all
      select Jogo, b14 as Dezena from JogosPossiveis
      union all
      select Jogo, b15 as Dezena from JogosPossiveis
   ) as j
   inner join
   (
      select Concurso, b1 as Dezena from ConcursosRealizados
      union all
      select Concurso, b2 as Dezena from ConcursosRealizados
      union all
      select Concurso, b3 as Dezena from ConcursosRealizados
      union all
      select Concurso, b4 as Dezena from ConcursosRealizados
      union all
      select Concurso, b5 as Dezena from ConcursosRealizados
      union all
      select Concurso, b6 as Dezena from ConcursosRealizados
      union all
      select Concurso, b7 as Dezena from ConcursosRealizados
      union all
      select Concurso, b8 as Dezena from ConcursosRealizados
      union all
      select Concurso, b9 as Dezena from ConcursosRealizados
      union all
      select Concurso, b10 as Dezena from ConcursosRealizados
      union all
      select Concurso, b11 as Dezena from ConcursosRealizados
      union all
      select Concurso, b12 as Dezena from ConcursosRealizados
      union all
      select Concurso, b13 as Dezena from ConcursosRealizados
      union all
      select Concurso, b14 as Dezena from ConcursosRealizados
      union all
      select Concurso, b15 as Dezena from ConcursosRealizados
   ) as c
      on c.Dezena = j.Dezena
   group by
      j.Jogo,
      c.Concurso
) as p
group by
    Jogo,
   QtdPontos
order by
    Jogo,
   QtdPontos


Se por acaso funcionar, o resultado vai estar em um formato diferente do que você postou.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Qui Set 20, 2018 7:13 pm    Assunto: Responder com Citação

Agradeço a resposta mas infelizmente os valores não estão retornando da forma que preciso.

Vou analisar melhor e tentar encontrar a solução.

Se preciso posso continuar neste tópico pedindo ajuda complementar?

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Set 21, 2018 9:53 am    Assunto: Responder com Citação

A query que sugeri retornou a quantidade correta de concursos em que cada jogo fez cada quantidade de pontos?

Acho que se você precisar de ajuda sobre a mesma questão não só pode como deve dar continuidade nesse mesmo tópico. Se for outra questão, acho melhor abrir outro tópico.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Sex Set 21, 2018 10:31 pm    Assunto: Responder com Citação

Imex, boa noite.

Mais uma vez agradeço sua atenção e boa vontade em mim ajudar. Very Happy

Infelizmente os resultados apresentados foram confusos, para cada jogo foram apresentados 3 resultados distintos.

Explicando:

A lotofácil possui premiações de 11 pontos, 12 pontos, 13 pontos, 14 pontos e 15 pontos, sendo que já foram realizados 1.713 concursos da lotofácil e existem 3.268.760 de possibilidades de jogo.

O que eu quero fazer?

Quero pegar cada possibilidade de jogo (3.268.760) e verificar em todos os 1.713 concursos já realizados. Ao realizar essa verificação quero saber quantas vezes cada possibilidade fez 11 pontos, 12 pontos, 13 pontos, 14 pontos e 15 pontos, sendo assim a consulta tem que retornar mais ou menos assim, Possibilidade(1) fez 11 pontos -> 140 vezes, fez 12 pontos -> 29 vezes, fez 13 pontos -> 3 vezes, fez 14 pontos -> 0 vezes, fez 15 pontos -> 0 vezes. Em resumo a primeira possibilidade possível percorre todos os 1.713 concursos realizados e me diz quantas vezes saíram 11 pontos, 12 pontos, 13 pontos, 14 pontos e 15 pontos, depois vai para a segunda possibilidade possível e assim por diante.

Anteriormente fiz um algorítimo de conferencia utilizando "while" e "for" e funciona legal, mas para conseguir catalogar todas as informações que preciso vai durar uma eternidade, deixei rodando por 12 horas e só consegui fazer 8.000 conferencias e preciso fazer exatamente 3.268.760, ou seja, mais de 3 milhões de conferencias, hehehehehe.

Por isso pensei na possibilidade de realizar uma consulta SQL, mas nunca fiz uma consulta muito complexa e estou um tanto que perdido para montar essa consulta, no caso acredito que a consulta SQL vai conseguir otimizar e muito o tempo de conferencias.

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Set 22, 2018 11:41 am    Assunto: Responder com Citação

Bom dia,

Entendi o que você quer fazer, mas acho que você não entendeu o resultado apresentado pela query que sugeri antes.
Experimente fazer uns testes com essa outra versão:

Código:
select
   Jogo,
   count(case when QtdPontos = 11 then 1 end) as com11pontos,
   count(case when QtdPontos = 12 then 1 end) as com12pontos,
   count(case when QtdPontos = 13 then 1 end) as com13pontos,
   count(case when QtdPontos = 14 then 1 end) as com14pontos,
   count(case when QtdPontos = 15 then 1 end) as com15pontos
from
(   
   select
      j.Jogo,
      c.Concurso,
      count(*) as QtdPontos
   from
   (
      select Jogo, b1 as Dezena from JogosPossiveis
      union all
      select Jogo, b2 as Dezena from JogosPossiveis
      union all
      select Jogo, b3 as Dezena from JogosPossiveis
      union all
      select Jogo, b4 as Dezena from JogosPossiveis
      union all
      select Jogo, b5 as Dezena from JogosPossiveis
      union all
      select Jogo, b6 as Dezena from JogosPossiveis
      union all
      select Jogo, b7 as Dezena from JogosPossiveis
      union all
      select Jogo, b8 as Dezena from JogosPossiveis
      union all
      select Jogo, b9 as Dezena from JogosPossiveis
      union all
      select Jogo, b10 as Dezena from JogosPossiveis
      union all
      select Jogo, b11 as Dezena from JogosPossiveis
      union all
      select Jogo, b12 as Dezena from JogosPossiveis
      union all
      select Jogo, b13 as Dezena from JogosPossiveis
      union all
      select Jogo, b14 as Dezena from JogosPossiveis
      union all
      select Jogo, b15 as Dezena from JogosPossiveis
   ) as j
   inner join
   (
      select Concurso, b1 as Dezena from ConcursosRealizados
      union all
      select Concurso, b2 as Dezena from ConcursosRealizados
      union all
      select Concurso, b3 as Dezena from ConcursosRealizados
      union all
      select Concurso, b4 as Dezena from ConcursosRealizados
      union all
      select Concurso, b5 as Dezena from ConcursosRealizados
      union all
      select Concurso, b6 as Dezena from ConcursosRealizados
      union all
      select Concurso, b7 as Dezena from ConcursosRealizados
      union all
      select Concurso, b8 as Dezena from ConcursosRealizados
      union all
      select Concurso, b9 as Dezena from ConcursosRealizados
      union all
      select Concurso, b10 as Dezena from ConcursosRealizados
      union all
      select Concurso, b11 as Dezena from ConcursosRealizados
      union all
      select Concurso, b12 as Dezena from ConcursosRealizados
      union all
      select Concurso, b13 as Dezena from ConcursosRealizados
      union all
      select Concurso, b14 as Dezena from ConcursosRealizados
      union all
      select Concurso, b15 as Dezena from ConcursosRealizados
   ) as c
      on c.Dezena = j.Dezena
   group by
      j.Jogo,
      c.Concurso
) as p
group by
   Jogo
order by
   Jogo


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Sáb Set 22, 2018 1:59 pm    Assunto: Responder com Citação

Boa tarde.

Imex sua primeira instrução SQL funciona perfeitamente, o problema foi minha falta de conhecimento, não tinha conseguido entender, mas agora tudo ficou claro para mim.

O detalhe é que a instrução faz a contagem de todos os valores e não apenas 11pontos, 12pontos, 13 pontos, 14pontos e 15pontos.

Sua segunda instrução gera um erro não especificado por causa do código abaixo:

Código:

   count(case when QtdPontos = 11 then 1 end) as com11pontos,
   count(case when QtdPontos = 12 then 1 end) as com12pontos,
   count(case when QtdPontos = 13 then 1 end) as com13pontos,
   count(case when QtdPontos = 14 then 1 end) as com14pontos,
   count(case when QtdPontos = 15 then 1 end) as com15pontos


Ainda faltam uns detalhes para melhorar a primeira instrução e exibir apenas os valores que preciso 11pontos, 12pontos, 13 pontos, 14pontos e 15pontos.

Mas só tenho a agradecer, muito obrigado, Very Happy Very Happy

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Set 22, 2018 8:26 pm    Assunto: Responder com Citação

Boa noite,

Experimente o trecho abaixo no lugar daquele que está provocando erro:

Código:
   sum(iif(QtdPontos = 11, 1, 0)) as com11pontos,
   sum(iif(QtdPontos = 12, 1, 0)) as com12pontos,
   sum(iif(QtdPontos = 13, 1, 0)) as com13pontos,
   sum(iif(QtdPontos = 14, 1, 0)) as com14pontos,
   sum(iif(QtdPontos = 15, 1, 0)) as com15pontos


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ranyery
Novato
Novato


Registrado: Terça-Feira, 11 de Julho de 2006
Mensagens: 8

MensagemEnviada: Sáb Set 22, 2018 10:38 pm    Assunto: Responder com Citação

Boa noite.

imex agora ficou perfeito, muito obrigado!!! Very Happy Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB