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 100 lignes.
SELECT *
FROM table
ORDER BY DBMS_RANDOM.VALUE FETCH NEXT 20 ROWS ONLY;
SAMPLE () n'est pas garanti de vous donner exactement 20 lignes, mais pourrait convenir requête complète + tri par ordre aléatoire pour les grandes tables):
SELECT *
FROM table SAMPLE(20);
Noter la 20
Voici un pourcentage approximatif, pas le nombre de lignes souhaité. Dans ce cas, puisque vous avez 100 lignes, pour obtenir environ 20 lignes, vous demandez un échantillon de 20%.
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;
Ceci est plus efficace car il n’a pas besoin de trier la table.
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;
Pour sélectionner au hasard 20 rangées, je pense que vous feriez mieux de choisir le lot ordonné 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;
Il est préférable d’utiliser les petites tables pour éviter de sélectionner de gros morceaux de données, mais pour en éliminer la majeure partie.