 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Qui Set 20, 2018 11:27 am Assunto: Criar uma consulta SQL (Resolvido) |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Set 20, 2018 2:29 pm Assunto: |
|
|
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 |
|
 |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Qui Set 20, 2018 4:49 pm Assunto: |
|
|
Estou usando Turbo Delphi e banco de dados access (.mdb), pretendo fazer a consulta utilizando adoquery.
Obrigado. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Set 20, 2018 5:23 pm Assunto: |
|
|
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 |
|
 |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Qui Set 20, 2018 7:13 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Set 21, 2018 9:53 am Assunto: |
|
|
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 |
|
 |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Sex Set 21, 2018 10:31 pm Assunto: |
|
|
Imex, boa noite.
Mais uma vez agradeço sua atenção e boa vontade em mim ajudar.
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sáb Set 22, 2018 11:41 am Assunto: |
|
|
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 |
|
 |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Sáb Set 22, 2018 1:59 pm Assunto: |
|
|
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,
Obrigado. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sáb Set 22, 2018 8:26 pm Assunto: |
|
|
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 |
|
 |
Ranyery Novato

Registrado: Terça-Feira, 11 de Julho de 2006 Mensagens: 8
|
Enviada: Sáb Set 22, 2018 10:38 pm Assunto: |
|
|
Boa noite.
imex agora ficou perfeito, muito obrigado!!!  |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|