105 votes

Comment obtenir des enregistrements au hasard à partir de la base de données Oracle ?

Je dois sélectionner des lignes au hasard dans une base de données Oracle.

Ex: Supposons une table avec 100 lignes, comment je peux retourner au hasard 20 de ces enregistrements sur les 100 lignes entières.

147voto

cagcowboy Points 13721
SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.RANDOM)
WHERE  rownum < 21;

15voto

grokster Points 1179
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

C'est plus efficace car il n'a pas besoin de trier le tableau.

10voto

Bishan Points 3445
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;

5voto

Nishant Sharma Points 350

Pour sélectionner au hasard 20 lignes, je pense que vous feriez mieux de sélectionner le lot d'entre elles classées au hasard et de sélectionner les 20 premières de cet ensemble.

Quelque chose comme:

 Select *
  from (select *
          from table
         order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM
 where rownum < 21;

Mieux utilisé pour les petites tables pour éviter de sélectionner de gros morceaux de données uniquement pour en rejeter la plupart.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X