2009/11/25 Jorge Vilela <[email protected]>:
> Vou tentar exemplificar com o joguinho.
> Quando o jogador bate a cabeça (Estilo mario) em um quadrado especial,
> existe a possibilidade de ganhar o cogumelo, a pena, o foguinho etc...
> Ao fazer um "select poder from poder_especial order by random() limit 1",
> todos os itens tem a mesma possibilidade de serem escolhidos, certo?
>
> E se eu tivesse, por exemplo, um campo que pudesse determinar a
> probabilidade? Por exemplo: Cogumelo tem 50% (0.5) de chances de aparecer,
> Pena tem 30% (0.3), Foguinho tem 20% (0.2). Eu poderia utilizar esse campo
> como base para o random()?
> Eu não quero forçar nenhum dos resultados, somente precisava "pender" mais
> para um ou para outro...
>
Como disse na mensagem anterior a função random() é uniformemente
distribuida então verifique se o que necessita é algo do tipo:
bdteste=# SELECT rnd, CASE WHEN rnd <= 0.5 THEN 'Cogumelo' WHEN rnd >
0.5 AND rnd <= 0.8 THEN 'Pena' Else 'Foguinho' END FROM (SELECT
random() AS rnd) foo;
rnd | case
--------------------+----------
0.0976872597821057 | Cogumelo
(1 registro)
isto é, cada vez que você executar este SELECT você terá 50% de
probabilidade do resultado ser "Cogumelo", 30% de ser "Pena" e 20% de
ser "Foguinho".
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral