2012-10-02 3 views
3

주어진 날짜에 X 레코드 수를 반환하는 기본 조건을 기반으로하는 쿼리가 있습니다.결과 수를 기반으로 쿼리 결과 분할

기본 쿼리의 결과를 확인한 다음 X 합계를 기준으로 백분율을 적용하고 2 개의 버킷으로 분할하려고합니다. 각 버킷은 전체 쿼리 결과의 비율은 예를 들어 X.

에 반환됩니다 :

  • 쿼리 A는 3500 개 레코드를 반환합니다.

  • 쿼리 A에서 반환 된 레코드 수가 < = 3000이면 3500 레코드를 40 %/60 %로 분할합니다 (1,400/2,100).

  • 쿼리 A에서 반환 된 레코드 수가> = 3001이고 < = 50,000이면 레코드를 10 %/90 %로 분할합니다 .Etc. 등

  • 나는 실제 레코드가 반환되기를 원하고 숫자가있는 한 행을 (열에서) 반환하는 레코드에서 작동하는 수학을 원한다.

답변

4

난 당신이 행의 결과 세트의 다른 부분을 표시하는 방법을 잘 모르겠어요, 그래서 난 그냥 그 행을 나타내는 값 1이 포함 된 행의 결과 세트에 추가 열 (part)을 추가 한 첫 번째 부분에 속하며 2 - 두 번째 부분에 속합니다. 행

select z.* 
    , case 
     when cnt_all <= 3000 and cnt <= 40 
     then 1 
     when (cnt_all between 3001 and 50000) and (cnt <= 10) 
     then 1 
     else 2 
     end part 
    from (select t.* 
      , 100*(count(col1) over(order by col1)/count(col1) over())cnt 
      , count(col1) over() cnt_all 
     from split_rowset t 
     order by col1 
     ) z 

Demo #1 수 위의 쿼리를 사용하여 뷰를 만든 다음 part 열을 기준으로 해당 뷰 필터링을 조회 할 수 있습니다보다 잘 사용할 수 있도록 행 3500

의 3000 Demo #2 수.

Demo #3보기를 사용합니다.