Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Stichproben von Oracle, Benötigen Sie eine genaue Anzahl von Ergebnissen (Musterklausel)

Wenn ich mir die Beispieltabelle von jonearles ausleihe, sehe ich genau dasselbe (in 11gR2 auf einem OEL-Entwickler-Image), wobei ich normalerweise Werte für a erhalte stark in Richtung 1 verzerrt; bei kleinen Stichprobenumfängen sehe ich manchmal gar keine. Mit dem zusätzlichen Randomisierungs-/Einschränkungsschritt, den ich in einem Kommentar erwähnt habe:

select a, count(*) from (
    select * from test1 sample (1)
    order by dbms_random.value
)
where rownum < 101
group by a;

... mit drei Läufen bekam ich:

         A   COUNT(*)
---------- ----------
         1         71
         2         29

         A   COUNT(*)
---------- ----------
         1        100

         A   COUNT(*)
---------- ----------
         1         64
         2         36

Ja, 100 % kamen wirklich als 1 zurück im zweiten Lauf. Die Verzerrung selbst scheint eher zufällig zu sein. Ich habe es mit dem block versucht Modifikator, der wenig Unterschied zu machen schien, vielleicht überraschend - ich hätte vielleicht gedacht, dass es in dieser Situation schlimmer werden würde.

Dies ist wahrscheinlich langsamer, sicherlich bei kleinen Stichprobengrößen, da es den gesamten Tisch treffen muss; aber gibt mir ziemlich gleichmäßige Splits ziemlich konsistent:

select a, count(*) from (
    select a, b from (
        select a, b, row_number() over (order by dbms_random.value) as rn
        from test1
    )
    where rn < 101
)
group by a;

Mit drei Läufen bekam ich:

         A   COUNT(*)
---------- ----------
         1         48
         2         52

         A   COUNT(*)
---------- ----------
         1         57
         2         43

         A   COUNT(*)
---------- ----------
         1         49
         2         51

... was etwas gesünder aussieht. YMMV natürlich.

Dieser Oracle-Artikel behandelt einige Sampling-Techniken, und Sie möchten vielleicht den ora_hash auswerten Ansatz sowie die stratifizierte Version, wenn Ihre Daten sich ausbreiten und Ihre Anforderungen an die „Repräsentativität“ dies erfordern.