Ir para conteúdo
Fórum Script Brasil
  • 0

Contar Registros mesmo valor na Tabela


brukfield

Pergunta

Ola! Sou novo com SQL e estou tentando fazer um script para verificar quais são os números que mais saem na loteria.

Criei uma tabela de nome Megasena com os campos CONCURSO, DATA, DEZENA1, DEZENA2, DEZENA3, DEZENA4, DEZENA5 e DEZENA6. (as dezenas são tipo caracter tamanho 02).

Inseri os resultados da Megasena de um arquivo baixado do site da caixa até ai tudo bem.

Agora que o bicho esta pegando, estou fazendo um Select utilizando o Count por período para tentar contar os números que saíram e não estou conseguindo, não esta dando certo.

Alguém pode me ajudar.

Desde já Obrigado!

Bruk

PS: os números não estão ordenados talvez tenha que ordena-los primeiro, também não estou conseguindo.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Bruk,

A primeira coisa que deve fazer é trocar o tipo caracter tamanho 02 por inteiro. A pesquisa é mais rápida.

você colocou os valores na tabela, ok? Agora é identificar quando aparece.

Pode-se fazer desta forma:

SELECT COUNT (*) FROM TABELA WHERE DEZENA1=10 OR DEZENA2=10 OR .....
Perceba que a dezena 10 vai repetir em todas as colunas. Se quiser contar todas as dezenas, no lugar do 10 coloque uma variável incremental e faça um loop. Ficaria assim:
SELECT COUNT (*) FROM TABELA WHERE DEZENA1=@Variavel OR DEZENA2=@Variavel OR .....

DICA:

- Não há a necessidade de ordenar. Se quiser, apenas no resultado do select.

- Crie indices para otimizar as consultas.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Fulvio,

Obrigado pelo retorno.

Usando o código abaixo é retornado o COUNT, porem seria muito trabalhoso ter que informar todos os números da mega.

CODE

SELECT COUNT (*) FROM LOTERIA WHERE DEZENA1=10 OR DEZENA2=10 OR DEZENA3= 10 OR DEZENA4=10 OR DEZENA5=10 OR DEZENA6=10

Não entendi como fazer o Loop usando variável! poderia dar um exemplo?

Outra coisa é que gostaria de informar um período buscando os números que mais saem entre o período.

ex.: WHERE DATA BETWEEN '20110101' AND '20110124'

Obrigado pela atenção

Bruk

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Bruk,

Fica realemente muito trabalhoso você colocar todos os números. É neste ponto q fará um loop. :.)

Ex.:

DECLARE @Numero INT
DECLARE @Resultado INT

SET @Numero = 1

WHILE @Numero <= 50
    BEGIN
        Set @Resultado = (SELECT COUNT (*) FROM LOTERIA WHERE DEZENA1=@Numero OR DEZENA2=@Numero OR DEZENA3=@Numero OR DEZENA4=@Numero OR DEZENA5=@Numero OR DEZENA6=@Numero)
        PRINT  (@Resultado)
        SET @Numero = @Numero + 1
    END

PS.: Não sei o intervalo de números da MegaSena.... rs. Coloquei o intervalo de 1 a 50. Ai você altera.

O seu BETWEEN está correto. Só dê uma olhada no formato da data.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Fulvio,

Obrigado mais uma vez pelo retorno.

O intervalo da mega é de 1 a 60. rsrs

Amigão o loop funcionou perfeitamente, mas o retorno está direto.

Ex:

18

17

26

25

28

26

19

20

28

18

21

21

20

Outro detalhe é que não consegui fazer o COUNT usando o BETWEEN.

Se puder ajudar agradeço muito.

CODE:

DECLARE @Numero INT

DECLARE @Resultado INT

SET @Numero = 1

SELECT DEZENA1, DEZENA2, DEZENA3, DEZENA4, DEZENA5, DEZENA6

FROM LOTERIA

WHERE DATA BETWEEN '20101201' AND '20101215'

WHILE @Numero <= 60

BEGIN

SET @Resultado = (SELECT COUNT (*) FROM ZZ1010 WHERE DEZENA1=@Numero OR DEZENA2=@Numero OR DEZENA3=@Numero OR DEZENA4=@Numero OR DEZENA5=@Numero OR DEZENA6=@Numero)

PRINT (@Resultado)

SET @Numero = @Numero + 1

END

Resultado é esse:

17 20 38 08 53 03

26 21 39 05 18 59

40 45 24 14 13 39

15 01 48 37 39 52

22 42 49 08 12 09

Estava contando com algo assim:

1 = 1

3 = 1

5 = 1

8 = 2

9 = 1

12 = 1

13 = 1

14 = 1

15 = 1

17 = 1

18 = 1

20 = 1

21 = 1

22 = 1

24 = 1

26 = 1

37 = 1

38 = 1

39 = 3

40 = 1

42 = 1

45 = 1

48 = 1

52 = 1

53 = 1

59 = 1

Mais uma vez obrigado pela ajuda.

At.

Bruk

Editado por brukfield
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Bruk,

Coloquei o retorno direto (print) apenas para testar e ver o resultado. Aí é só tirar o print e colocar onde quiser.... rs. O BETWEEN vai ficar no loop também? Não entendi o select antes do loop. Fiz umas alterações no seu script. Dê uma olhada:

DECLARE @Numero INT
DECLARE @Resultado INT

SET @Numero = 1

WHILE @Numero <= 60
BEGIN
SET @Resultado = (SELECT COUNT (*) FROM LOTERIA WHERE DEZENA1=@Numero OR DEZENA2=@Numero 
OR DEZENA3=@Numero OR DEZENA4=@Numero OR DEZENA5=@Numero OR DEZENA6=@Numero AND DATA BETWEEN '20101201' AND '20101215')

PRINT (@Resultado)
SET @Numero = @Numero + 1

END

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo obrigado por tamanha paciência que esta tendo me ajudando.

Desculpe minha ausência de conhecimento, mas não estou conseguindo fazer que o retorno da query fique assim:

Numero = Qtd sorteada.

Ex:

7 = 1

9 = 3

10 = 1

12 = 2

13 = 2

Claro que respeitando a data informada no Between.

Obrigado.

Bruk

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Bruk,

rs... sem problemas meu Amigo.

Pra entender, fiz um exemplo de como poderá resolver seu problema. Criei algumas temporárias, dei carga e fiz o loop. O resultado joguei em outra temporária para conferêcia.

Entenda a estrutura e depois é só adaptar às suas necessidades. Retirei o BETWEEN para facilitar o exemplo.

Qualquer dúvida, pode postar. :.)

-- Criação de tabelas temporárias. Rodar apenas uma vez.
CREATE TABLE #Loteria (DEZENA1 int, DEZENA2 int,DEZENA3 int,DEZENA4 int,DEZENA5 int,DEZENA6 INT, DATA datetime)
CREATE TABLE #Resultado (DEZENA int, Total int)

-- Inserção dos dados na temporária
insert into #Loteria values (17, 20, 38, 08, 53, 03, GETDATE())
insert into #Loteria values (26, 21, 39, 05, 18, 59, GETDATE())
insert into #Loteria values (40, 45, 24, 14, 13, 39, GETDATE())
insert into #Loteria values (15, 01, 48, 37, 39, 52, GETDATE())
insert into #Loteria values (22, 42, 49, 08, 12, 09, GETDATE())


-- Rodar o loop para contar
DECLARE @Numero INT
DECLARE @Resultado INT

SET @Numero = 1

WHILE @Numero <= 60
BEGIN
SET @Resultado = (SELECT COUNT (*) FROM #LOTERIA WHERE DEZENA1=@Numero OR DEZENA2=@Numero 
OR DEZENA3=@Numero OR DEZENA4=@Numero OR DEZENA5=@Numero OR DEZENA6=@Numero)

INSERT INTO #Resultado VALUES (@Numero, @Resultado)

SET @Numero = @Numero + 1

END

-- Conferindo os resultados
SELECT * FROM #Resultado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...