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 !
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 ? |