Re: Un enregistrement au hasard ?

From: Sébastien Dinot <sebastien(dot)dinot(at)free(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Un enregistrement au hasard ?
Date: 2008-11-12 23:12:05
Message-ID: 20081112231205.GA7483@dinot.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Stephane Bortzmeyer a écrit :
> L'excellent site StackOverflow a toujours vu un débat sur toute
> question technique :-)
>
> http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql

Je viens d'essayer la solution proposée en tête de page en effectuant une
adaptation minimaliste à PostgreSQL :

SELECT *
FROM personne
WHERE id_personne >= RANDOM() * ( SELECT MAX(id_personne) FROM personne )
LIMIT 1;

Ecrite ainsi, cette requête ne fonctionne pas très bien chez moi.

La requête :

SELECT MAX(id_personne) FROM personne;

Renvoie 1847 avec ma base de test.

Pourtant, la requête proposée me renvoie rarement un identifiant supérieur à
60 et jamais supérieur à 120 (sur une cinquantaine d'esssais). Le fait
d'ajouter des parenthèses dans la clause WHERE ne change rien :

SELECT *
FROM personne
WHERE id_personne >= ( RANDOM() * ( SELECT MAX(id_personne) FROM personne ) )
LIMIT 1;

Pour obtenir le tirage aléatoire attendu, j'ai du modifier la requête comme
suit :

SELECT *
FROM personne
WHERE id_personne > ( SELECT RANDOM() * ( SELECT MAX(id_personne) FROM personne ) )
LIMIT 1;

Je n'arrive pas à comprendre pourquoi. Une âme charitable pourrait-elle
éclairer ma lanterne ?

Chose amusante, sur une base MySQL équivalente, je rencontre le même problème
mais la solution que j'ai trouvée pour PostgreSQL ne fonctionne pas avec MySQL
(i.e. la requête est bien évidemment acceptée mais je n'ai perçu aucun impact
sur les tirages).

Sébastien

--
Sébastien Dinot, sebastien(dot)dinot(at)free(dot)fr
http://sebastien.dinot.free.fr/
Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer !

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Daniel Verite 2008-11-13 12:15:52 Re: Un enregistrement au hasard ?
Previous Message Sébastien Dinot 2008-11-12 22:28:27 Re: Un enregistrement au hasard ?