복붙노트

[SQL] 쿼리 결과에서 결과의 무작위 표본을 선택

SQL

쿼리 결과에서 결과의 무작위 표본을 선택

이 문제는 SQL Server에서 레코드 무작위 (틱) 샘플을 얻기에 관하여 묻고 대답은 TABLESAMPLE을 사용하는 것이 었습니다. 오라클 (10)에 해당하는이 있습니까?

가없는 경우, 쿼리 세트에서 결과의 무작위 표본을 얻을 수있는 표준 방법은 무엇입니까? 예를 들어 한 사람이 어떻게 수백만 일반적으로 반환하는 쿼리에서 1,000 임의의 행을 얻을 수 있나요?

해결법

  1. ==============================

    1.

    SELECT  *
    FROM    (
            SELECT  *
            FROM    mytable
            ORDER BY
                    dbms_random.value
            )
    WHERE rownum <= 1000
    
  2. ==============================

    2.샘플 절은 당신에게 테이블의 모든 행의 무작위 표본 비율을 줄 것이다.

    샘플 절은 당신에게 테이블의 모든 행의 무작위 표본 비율을 줄 것이다.

    예를 들어, 우리가 행의 25 %를 얻을 :

    SELECT * FROM emp SAMPLE(25)
    

    (분석 기능 중 하나를 사용하여) 다음 SQL 당신에게 테이블 (A GROUP BY 유사) 특정 값의 각 발생의 특정 번호를 무작위로 샘플을 제공 할 것입니다.

    우리는 각각의 10 샘플 : 여기

    SELECT * FROM (
    SELECT job, sal, ROW_NUMBER()
    OVER (
    PARTITION BY job ORDER BY job
    ) SampleCount FROM emp
    )
    WHERE SampleCount <= 10
    
  3. ==============================

    3.이에없는 완벽한 대답하지만, 훨씬 더 나은 성능을 얻을 것이다.

    이에없는 완벽한 대답하지만, 훨씬 더 나은 성능을 얻을 것이다.

    SELECT  *
    FROM    (
        SELECT  *
        FROM    mytable sample (0.01)
        ORDER BY
                dbms_random.value
        )
    WHERE rownum <= 1000
    

    당신이 정말로 당신이 그 수를 조정해야 1000 개 행을 원한다면 샘플, 당신에게 당신의 실제 테이블의 백분율을 줄 것이다. 내 결과를 제한하지 않도록 더 자주 난 그냥 어쨌든 행의 임의의 번호가 필요합니다. 2 백만 행 내 데이터베이스에 나는 60 초 대 2 초 얻을.

    select * from mytable sample (0.01)
    
  4. ==============================

    4.

    SELECT * FROM TABLE_NAME SAMPLE(1)
    

    정확히 1/100 관찰의 수보다는 대략 1 %의 점유율을 olny 줄 것이다. 가능성이 높은 이유는 오라클이 생성하는 샘플에 포함 여부에 대한 각각의 관찰 임의의 플래그를 생성보다. 이러한 생성 과정에서의 인자 1 (1 %)을 시료로 선택되는 각각의 관측 확률의 역할을 담당하고있다.

    이것이 사실이라면, 샘플 크기의 실제 분포는 이항 될 것입니다.

  5. ==============================

    5.나는 내가 SAMPLE 절을 사용하지만 여전히 첫 번째 행을 필터링 할 수 있습니다 하나의 버전을 추가 할이 이미 답을 알지만, 여기에 많은 방문을보고 :

    나는 내가 SAMPLE 절을 사용하지만 여전히 첫 번째 행을 필터링 할 수 있습니다 하나의 버전을 추가 할이 이미 답을 알지만, 여기에 많은 방문을보고 :

    with cte1 as (
        select *
        from t_your_table
        where your_column = 'ABC'
    )
    select * from cte1 sample (5)
    

    그러나 주 염기가 요구를 예를 들면 어떤 뷰는 않을 수도 작업 수단 ROWID 열을 선택할 것이다.

  6. ==============================

    6.샘플 기능 ORACLE 샘플 데이터를 사용한다. 그래서 당신은 다음과 같이 시도 할 수 있습니다 : -

    샘플 기능 ORACLE 샘플 데이터를 사용한다. 그래서 당신은 다음과 같이 시도 할 수 있습니다 : -

    SELECT * FROM TABLE_NAME SAMPLE(50);
    

    여기서 (50)는 테이블에 포함 된 데이터의 비율이다. 당신이 당신과 같은 쿼리를 실행할 수 있습니다 100000에서 1000 개 행을 원한다면 :

    SELECT * FROM TABLE_NAME SAMPLE(1);
    

    이 당신을 도울 수 있기를 바랍니다.

  7. ==============================

    7.이런 식으로 뭔가 작업을해야합니다 :

    이런 식으로 뭔가 작업을해야합니다 :

    SELECT * 
    FROM table_name
    WHERE primary_key IN (SELECT primary_key 
                          FROM
                          (
                            SELECT primary_key, SYS.DBMS_RANDOM.RANDOM 
                            FROM table_name 
                            ORDER BY 2
                          )
                          WHERE rownum <= 10 );
    
  8. ==============================

    8.우리는 주어진 및 할당은 주 등의 경간 각 에이전트에 대해 agents..i.e이 개 무작위 기록의 목록에서 두 레코드를 선택 .... 아래 우리가 가진 무엇을하고 그것을 작동

    우리는 주어진 및 할당은 주 등의 경간 각 에이전트에 대해 agents..i.e이 개 무작위 기록의 목록에서 두 레코드를 선택 .... 아래 우리가 가진 무엇을하고 그것을 작동

    with summary as (
    Select Dbms_Random.Random As Ran_Number,
                 colmn1,
                 colm2,
                 colm3
                 Row_Number() Over(Partition By col2 Order By Dbms_Random.Random) As Rank
        From table1, table2
     Where Table1.Id = Table2.Id
     Order By Dbms_Random.Random Asc)
    Select tab1.col2,
                 tab1.col4,
                 tab1.col5,
        From Summary s
     Where s.Rank <= 2;
    
  9. from https://stackoverflow.com/questions/733652/select-a-random-sample-of-results-from-a-query-result by cc-by-sa and MIT license