Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pengambilan sampel dari Oracle, Perlu jumlah hasil yang tepat (Sample Clause)

Meminjam tabel contoh jonearles, saya melihat hal yang persis sama (dalam 11gR2 pada gambar pengembang OEL), biasanya mendapatkan nilai untuk a sangat condong ke arah 1; dengan ukuran sampel yang kecil kadang-kadang saya tidak dapat melihat sama sekali. Dengan langkah pengacakan/pembatasan ekstra yang saya sebutkan dalam komentar:

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

... dengan tiga kali saya mendapatkan:

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

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

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

Ya, 100% benar-benar kembali sebagai 1 pada putaran kedua. Kemiringan itu sendiri tampaknya agak acak. Saya mencoba dengan block pengubah yang tampaknya membuat sedikit perbedaan, mungkin mengejutkan - saya mungkin berpikir itu akan menjadi lebih buruk dalam situasi ini.

Ini kemungkinan akan lebih lambat, tentu saja untuk ukuran sampel kecil, karena harus mengenai seluruh tabel; tetapi memberi saya cukup genap cukup konsisten:

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;

Dengan tiga putaran saya mendapatkan:

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

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

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

... yang terlihat sedikit lebih sehat. YMMV tentunya.

Artikel Oracle ini mencakup beberapa teknik pengambilan sampel, dan Anda mungkin ingin mengevaluasi ora_hash pendekatan juga, dan versi bertingkat jika data Anda menyebar dan persyaratan Anda untuk 'keterwakilan' menuntutnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah penggabungan

  2. Angkat pernyataan

  3. Tabel kueri dari database ORACLE lain

  4. Bagaimana kita bisa menentukan ukuran parameter output dalam prosedur tersimpan?

  5. Semua Tampilan Performa Dinamis 11g Berguna