Oracle
 sql >> Base de données >  >> RDS >> Oracle

échantillon stratifié sur des plages

Cela signifie que vous avez besoin d'au moins un enregistrement de chaque groupe et de plusieurs enregistrements de manière aléatoire, alors essayez ceci :

SELECT GROUP, VALUE FROM
(SELECT T2.GROUP, T2.VALUE, 
ROW_NUMBER() 
OVER (PARTITION BY T2.GROUP ORDER BY NULL) AS RN
FROM TABLE_1 T1
JOIN TABLE_2 T2
ON(T1.RANGE = T2.GROUP))
WHERE RN = 1 OR
CASE WHEN RN > 1 
AND RN = CEIL(DBMS_RANDOM.VALUE(1,RN))
THEN 1 END = 1
FETCH FIRST 10000 ROWS ONLY;

Ici, Rownum est pris au hasard pour chaque groupe, puis le résultat prend rownum 1 et autre rownum s'ils remplissent une condition aléatoire.

Bravo !