Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Lấy mẫu từ Oracle, Cần số lượng kết quả chính xác (Điều khoản mẫu)

Mượn bảng ví dụ của jonearles, tôi thấy chính xác điều tương tự (trong 11gR2 trên hình ảnh nhà phát triển OEL), thường nhận các giá trị cho a lệch nhiều về phía 1; với kích thước mẫu nhỏ, đôi khi tôi không thể nhìn thấy gì cả. Với bước ngẫu nhiên / hạn chế bổ sung mà tôi đã đề cập trong một nhận xét:

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

... với ba lần chạy tôi đã nhận được:

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

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

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

Có, 100% thực sự đã trở lại dưới dạng 1 trong lần chạy thứ hai. Bản thân việc nghiêng dường như khá ngẫu nhiên. Tôi đã thử với block công cụ sửa đổi dường như không tạo ra sự khác biệt nhỏ, có lẽ đáng ngạc nhiên - tôi có thể nghĩ rằng nó sẽ trở nên tồi tệ hơn trong tình huống này.

Điều này có thể sẽ chậm hơn, chắc chắn là đối với các kích thước mẫu nhỏ, vì nó phải đạt được toàn bộ bảng; nhưng không mang lại cho tôi sự phân chia khá, thậm chí khá nhất quán:

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;

Với ba lần chạy, tôi nhận được:

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

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

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

... trông khỏe mạnh hơn một chút. Tất nhiên là YMMV.

Bài viết này của Oracle bao gồm một số kỹ thuật lấy mẫu và bạn có thể muốn đánh giá ora_hash cũng như cách tiếp cận và phiên bản phân tầng nếu dữ liệu của bạn trải rộng và các yêu cầu về 'tính đại diện' của bạn đòi hỏi nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL:chọn từ bảng có bảng lồng nhau

  2. Thay đổi định dạng ngày

  3. Làm thế nào để thay đổi giá trị âm thành dương trong Oracle?

  4. Xác định lỗi với Oracle VPD / RLS

  5. Làm cách nào để biết liệu cơ sở dữ liệu tiên tri có được đặt thành tự động gửi hay không?