Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida valor aleatório

SELECT(RAND()* (300 - 15  + 1)) + 15;

Eu ainda não consegui entender a lógica desse comando, mesmo com a explicação do professor, Por que eu multiplico pelo valor aleatório da função RAND e somo mais 1 após a diferença do valor máximo e valor mínimo e depois mais 15 (valor mínimo)

Origado

3 respostas

Olá André, tudo bem? Como o instrutor falou o RAND é uma função interna do MySQL que gera números aleatórios entre 0 e 1, porém precisamos de números inteiros para trabalhar com a contagem de elementos da tabela. E para obtermos números inteiros precisamos multiplicar a função RAND() por um número inteiro qualquer, nesse caso o instrutor buscar fazer um range ou seja um intervalo, porém a função RAND() nunca retorna o valor 1, sendo assim nunca retorna o valor máximo que for informando no comando, então vamos diminuir o intervalo para ficar mais fácil de compreender, pense que queremos um número decimal (com ponto flutuante) entre 10 e 25, então poderíamos fazer da seguinte forma:

RAND()*(25-10)+10

Porém dessa forma nunca vamos ter a possibilidade do número retorna ser 25 por ele é o extremo na comparação ou seja ele é como se fosse o 1** para a função **RAND(). Por isso que devemos multiplicar o RAND() pelo subtração do MAX-MIN somado com 1, para podermos ter a possibilidade do número 25 ser retornado, então a forma correta para termos um número aleatório em entre 10 e 25, sendo que o 10 e o 25 estão inclusos então eles podem ser retornado é a seguinte:

RAND()*(25-10+1)+10

Pronto já deve ter ficado claro o porque da soma do 1, agora porque depois de tudo temos que somar o mínimo? Isso acontece porque o RAND() retorna um valor entre 0 e 1 sem nenhum intervalo, então precisamos somar com o número mínimo para poder excluir essa parte que não queremos. Seguindo esse exemplo, pense que o RAND() retornou o número 0.514 a formula seria:

0.514 * (25-10+1) + 10

Então pela precedência matemática temos que resolver o que está dentro dos parenteses:

0.514 * 16 + 10

E agora a multiplicação vêm primeiro que a soma então temos o seguinte valor:

8.224 + 10

Temos então o número 8.224. Se não fosse somado com o mínimo teríamos um número fora do intervalo que desejamos, e não queremos isso, então temos que realizar a soma:

18.224

Assim temos um número decimal dentro do intervalo que desejamos.

Espero ter esclarecido sua dúvida!

Muito obrigado pela atenção!!! Esclareceu tudo!!

solução!

Que bom André, fico muito feliz por ajudar! Sendo assim você poderia marcar minha resposta como solução, assim caso alguém tenha a mesma dúvida que você poderá encontrar a solução facilmente aqui!